out (référence C#)
Vous pouvez utiliser le mot clé contextuel out dans deux contextes (chacun est un lien vers des informations détaillées), en tant que modificateur de paramètre ou dans les déclarations de paramètre de type générique des interfaces et des délégués. Cette rubrique décrit le modificateur de paramètre, mais vous pouvez consultercette autre rubrique pour plus d'informations sur les déclarations de paramètre de type générique.
Le mot clé out entraîne le passage des arguments par référence. La situation est similaire à celle du mot clé ref, à ceci près que ref nécessite que la variable soit initialisée avant d'être transmise. Pour utiliser un paramètre out, la définition de la méthode et la méthode d'appel doivent utiliser explicitement le mot clé out. Par exemple :
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Bien que les variables passées en tant qu'arguments out ne doivent pas être initialisées avant d'être passées, la méthode appelée doit assigner une valeur avant le retour de la méthode.
Bien que les mots clés ref et out entraînent un comportement différent lors de l'exécution, ils ne sont pas considérés comme 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 que l'une d'elles accepte un argumentref et l'autre un argument out. Le code suivant, par exemple, ne se compilera pas :
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) { }
}
Cependant, la surcharge peut avoir lieu si une méthode accepte un argument ref ou out et que l'autre n'utilise aucune des deux, comme suit :
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, par conséquent, ne peuvent pas être passées en tant que paramètres out.
Pour plus d'informations sur le passage de tableaux, consultez Passage de tableaux à l'aide de paramètres 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 :
méthodes Async, que vous définissez à l'aide du modificateur async ;
méthodes Iterator, qui incluent une instruction yield return ou yield break.
Exemple
La déclaration d'une méthode out est utile lorsque vous souhaitez qu'une méthode retourne plusieurs valeurs. L'exemple suivant utilise out pour retourner trois variables avec un seul appel de méthode. Notez que le troisième argument reçoit la valeur null. Cela permet aux méthodes de retourner des valeurs le cas échéant.
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;
}
}