È possibile utilizzare la out
parola chiave contestuale in due contesti (ognuno è un collegamento a informazioni dettagliate), come modificatore di parametri o nelle dichiarazioni di parametri di tipo generico in interfacce e delegati. In questo argomento viene descritto il modificatore di parametro, ma è possibile vedere questo altro argomento per informazioni sulle dichiarazioni di parametri di tipo generico.
La out
parola chiave fa passare argomenti per riferimento. È come la ref
parola chiave, tranne per il fatto che è ref
necessario inizializzare la variabile prima di passarla. Per utilizzare un out
parametro, sia la definizione del metodo sia il metodo chiamante devono utilizzare esplicitamente la out
parola chiave. Ad esempio: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Sebbene le variabili passate come out
argomenti non debbano essere inizializzate prima di essere passate, il metodo chiamato deve assegnare un valore prima che il metodo ritorni.
Sebbene le parole chiave ref
e out
causino un comportamento di runtime diverso, non sono considerate parte della firma del metodo al momento della compilazione. Pertanto, i metodi non possono essere sovraccaricati se l'unica differenza è che un metodo accetta un ref
argomento e l'altro accetta un out
argomento. Il seguente codice, ad esempio, non verrà compilato: 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) { }
}
Il sovraccarico può essere eseguito, tuttavia, se un metodo accetta a ref
o out
argomento e l'altro non ne utilizza nessuno, in questo modo: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Le proprietà non sono variabili e pertanto non possono essere passate come out
parametri.
Per informazioni sul passaggio di matrici, consultare Passaggio di matrici mediante ref
e out
(Guida per programmatori C #).
Non è possibile utilizzare le parole chiave ref
e out
per i seguenti tipi di metodi:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Esempio
La dichiarazione di un out
metodo è utile quando si desidera che un metodo restituisca più valori. L'esempio seguente utilizza out
per restituire tre variabili con una singola chiamata di metodo. Si noti che il terzo argomento è assegnato a null. Ciò consente ai metodi di restituire valori facoltativamente. 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
non può essere letta prima che sia assegnata a.ref
non ha questa limitazione. Quindi c'è quello.