Des chercheurs danois et suédois en sciences informatiques et systèmes autonomes ont décortiqué la sécurité...
Nvidia se prépare à livrer la plate-forme serveur HGX-2 qui sera capable d'exploiter la puissance de 16 GPU Tesla V100...
L'EMD, une école de commerce située à Marseille ouvre à la prochaine rentrée l'école du numérique...
Main
est le point d'entrée de chaque application C# et elle est appelée par le Common Language Runtime (CLR) au démarrage du programme.class
ou un struct
en spécifiant le niveau d'accès comme public
ou private
,
les modificateurs facultatifs comme abstract
ou sealed
, la valeur de retour, le nom de la méthode et les éventuels paramètres de méthode.
Ces parties forment ensemble la signature de la méthode.Motorcycle
peuvent donc être appelées comme dans l'exemple suivant :ref
.class
, comme le montre l'exemple suivant.SampleRefType
à la méthode ModifyObject
.ModifyObject
au champ value
du paramètre, obj
, modifie également le champ value
de l'argument, rt
, dans la méthode TestRefType
.
La méthode TestRefType
affiche 33
en tant que sortie.void
,
la méthode peut retourner la valeur à l'aide du mot clé return
. Une instruction avec le mot clé return
suivi d'une valeur qui correspond
au type de retour retourne cette valeur à l'appelant de la méthode.ref
est utilisé dans la signature de méthode et s'il suit chaque mot clé return
.
Par exemple, la signature de méthode suivante et l'instruction de retour indiquent que la méthode retourne un nom de variable estDistance
par référence à l'appelant.return
arrête également l'exécution de la méthode.
Si le type de retour est void
, une instruction return
sans valeur est quand même utile pour arrêter l'exécution de la méthode.
Sans le mot clé return
, la méthode arrête de s'exécuter quand elle atteint la fin du bloc de code.
Les méthodes dotées d'un type de retour non void
doivent utiliser le mot clé return
pour retourner une valeur.
Par exemple, ces deux méthodes utilisent le mot clé return
pour retourner des entiers :result
, pour stocker une valeur est facultative.
Elle peut favoriser la lisibilité du code ou s'avérer nécessaire si vous avez besoin de stocker la valeur d'origine de l'argument pour la portée entière de la méthode.ref
local si vous avez l'intention de modifier sa valeur.
Par exemple, si la méthode Planet.GetEstimatedDistance
retourne une valeur Double par référence, vous pouvez la définir en tant que variable ref
local avec du code semblable à celui-ci :M
, qui modifie le contenu du tableau n'est pas nécessaire si la fonction appelante a passé le tableau à M
.
Vous pouvez retourner le tableau obtenu à partir de M
pour bénéficier d'un style approprié ou d'un flux fonctionnel de valeurs, mais cela n'est pas nécessaire, car C# passe tous les types de référence par valeur,
et la valeur d'une référence de tableau est le pointeur qui désigne le tableau. Dans la méthode M
, les modifications apportées au contenu du tableau sont observables par tout code ayant une référence au tableau,
comme dans l'exemple suivant.async
vous permet d'appeler des méthodes asynchrones sans utiliser de rappels explicites ni
fractionner manuellement votre code entre plusieurs méthodes ou expressions lambda.async
, vous pouvez utiliser l'opérateur await
dans la méthode.
Quand le contrôle atteint une expression await
dans la méthode async
, il retourne à l'appelant,
et la progression dans la méthode est interrompue jusqu'à ce que la tâche attendue se termine.
Quand la tâche est terminée, l'exécution peut reprendre dans la méthode.async
retourne à l'appelant quand elle rencontre le premier objet await qui n'est pas encore terminé
ou quand elle atteint la fin de la méthode async
, selon la première éventualité.
async
peut avoir un type de retour Task‹TResult›
, Task
ou void
.
Le type de retour void
est principalement utilisé pour définir les gestionnaires d'événements, où un type de retour void
est requis.
Une méthode async
qui retourne void
ne peut pas être attendue, et l'appelant d'une méthode retournant void
ne
peut intercepter aucune exception levée par la méthode.DelayAsync
est une méthode async
dont le type de retour est Task‹TResult›
.
DelayAsync
a une instruction return
qui retourne un entier.
Ainsi, la déclaration de méthode de DelayAsync
doit avoir un type de retour de Task‹int›
.
étant donné que le type de retour est Task‹int›
, l'évaluation de l'expression await
dans DoSomethingAsync
produit un entier,
comme le montre l'instruction suivante : int result = await delayTask
.startButton_Click
est un exemple de méthode async
dont le type de retour est void
.
étant donné que DoSomethingAsync
est une méthode async
,
la tâche pour l'appel à DoSomethingAsync
doit être attendue, comme le montre l'instruction suivante : await DoSomethingAsync();
.
La méthode startButton_Click
doit être définie avec le modificateur async
car la méthode a une expression await
.async
ne peut pas déclarer de paramètres ref
ou out
,
mais elle peut appeler des méthodes qui comportent ces paramètres.=>
:void
ou est une méthode async
, alors le corps de la méthode doit être
une expression d'instruction (même chose avec les expressions lambda). En ce qui concerne les propriétés et indexeurs,
ils doivent être en lecture seule et vous n'utilisez pas le mot clé d'accesseur get
.yield return
pour retourner chaque élément un par un.
Quand une instruction yield return
est atteinte, l'emplacement actuel dans le code est mémorisé.
L'exécution redémarre à partir de cet emplacement au prochain appel de l'itérateur.foreach
.IEnumerable
, IEnumerable‹T›, IEnumerator
ou IEnumerator‹T›
.expression-bodied
.async
et unsafe
.private
, génère l'erreur de compilateur CS0106
: "Le modificateur "private" n'est pas valide pour cet élément"
.
static
.
L'inclusion du mot clé static
génère l'erreur de compilateur CS0106
: "Le modificateur "static" n'est pas valide pour cet élément"
.
AppendPathSeparator
qui est privée pour une méthode nommée GetText
:async
, les exceptions levées dans une méthode async
sont
observées quand la tâche retournée est attendue.OddSequence
qui énumère les nombres impairs dans une plage spécifiée.
Sachant qu'elle passe à la méthode d'énumérateur OddSequence
un nombre supérieur à 100,
la méthode lève une exception ArgumentOutOfRangeException
.
Comme le montre la sortie de l'exemple, l'exception apparaît uniquement au moment d'itérer les nombres,
et non à la récupération de l'énumérateur.async
nécessitent que vous examiniez les exceptions internes d'un AggregateException
.
Les fonctions locales permettent à votre code d'échouer rapidement et à votre exception d'être à la fois levée et
observée de manière synchrone.GetMultipleAsync
visant à marquer une pause pendant
un nombre défini de secondes et retourner une valeur qui est un multiple aléatoire de ce nombre de secondes.
Le délai maximal est de 5 secondes ; une exception ArgumentOutOfRangeException
est obtenue si la valeur est supérieure à 5.
Comme le montre l'exemple suivant, l'exception qui est levée quand une valeur de 6 est passée à la méthode GetMultipleAsync
est encapsulée dans une exception AggregateException
après que la méthode GetMultipleAsync
a démarré son exécution.ArgumentOutOfRangeException
n'est pas encapsulée
dans une exception AggregateException
.PrintOrderDetails("Gift Shop", 31, "Red Mug");
PrintOrderDetails(orderNum: 31, productName: "Red Mug", sellerName: "Gift Shop");
PrintOrderDetails(productName: "Red Mug", sellerName: "Gift Shop", orderNum: 31);
PrintOrderDetails("Gift Shop", 31, productName: "Red Mug");
PrintOrderDetails(sellerName: "Gift Shop", 31, productName: "Red Mug");
//anExample.ExampleMethod(3, ,4);
anExample.ExampleMethod(3, optionalint: 4);