Vous pouvez utiliser le out
mot clé contextuel dans deux contextes (chacun est un lien vers des informations détaillées), comme modificateur de paramètre ou dans des déclarations de paramètres de type générique dans les interfaces et les délégués. Cette rubrique décrit le modificateur de paramètre, mais vous pouvez consulter cette autre rubrique pour plus d'informations sur les déclarations de paramètres de type générique.
Le out
mot-clé fait passer les arguments par référence. C'est comme le ref
mot - clé, sauf que cela ref
nécessite que la variable soit initialisée avant d'être passée. Pour utiliser un out
paramètre, la définition de la méthode et la méthode appelante doivent utiliser explicitement le out
mot clé. Par exemple: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Bien qu'il out
ne soit pas nécessaire d'initialiser les variables transmises en tant qu'arguments avant de les transmettre, la méthode appelée doit affecter une valeur avant le retour de la méthode.
Bien que les mots clés ref
et out
provoquent des comportements d'exécution différents, ils ne sont pas considérés comme faisant partie de la signature de la méthode au moment de la compilation. Par conséquent, les méthodes ne peuvent pas être surchargées si la seule différence est qu'une méthode prend un ref
argument et que l'autre prend un out
argument. Le code suivant, par exemple, ne compilera pas: C #
class CS0663_Example
{
// Compiler error CS0663: "Cannot define overloaded
// methods that differ only on ref and out".
public void SampleMethod(out int i) { }
public void SampleMethod(ref int i) { }
}
La surcharge peut être effectuée, cependant, si une méthode prend un argument ref
or out
et que l'autre n'utilise ni l'un ni l'autre, comme ceci: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Les propriétés ne sont pas des variables et ne peuvent donc pas être passées en tant que out
paramètres.
Pour plus d'informations sur le passage de tableaux, consultez Passage de tableaux à l'aide de ref
et out
(Guide de programmation C #).
Vous ne pouvez pas utiliser les mots clés ref
et out
pour les types de méthodes suivants:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Exemple
La déclaration d'une out
méthode est utile lorsque vous souhaitez qu'une méthode renvoie plusieurs valeurs. L'exemple suivant utilise out
pour renvoyer trois variables avec un seul appel de méthode. Notez que le troisième argument est affecté à null. Cela permet aux méthodes de renvoyer des valeurs en option. C #
class OutReturnExample
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}
out
ne peut pas être lue avant d'être affectée à.ref
n'a pas cette restriction. Il y a donc ça.