È possibile utilizzare la outparola 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 outparola chiave fa passare argomenti per riferimento. È come la refparola chiave, tranne per il fatto che è refnecessario inizializzare la variabile prima di passarla. Per utilizzare un outparametro, sia la definizione del metodo sia il metodo chiamante devono utilizzare esplicitamente la outparola 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 outargomenti non debbano essere inizializzate prima di essere passate, il metodo chiamato deve assegnare un valore prima che il metodo ritorni.
Sebbene le parole chiave refe outcausino 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 refargomento e l'altro accetta un outargomento. 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 refo outargomento 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 outparametri.
Per informazioni sul passaggio di matrici, consultare Passaggio di matrici mediante refe out(Guida per programmatori C #).
Non è possibile utilizzare le parole chiave refe outper 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 outmetodo è utile quando si desidera che un metodo restituisca più valori. L'esempio seguente utilizza outper 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;
}
}
outnon può essere letta prima che sia assegnata a.refnon ha questa limitazione. Quindi c'è quello.