Sie können das out
Kontextschlüsselwort in zwei Kontexten (jeder ist ein Link zu detaillierten Informationen), als Parametermodifikator oder in generischen Typparameterdeklarationen in Schnittstellen und Delegaten verwenden. In diesem Thema wird der Parametermodifikator erläutert. In diesem anderen Thema finden Sie Informationen zu den generischen Typparameterdeklarationen.
Das out
Schlüsselwort bewirkt, dass Argumente als Referenz übergeben werden. Dies ist wie das ref
Schlüsselwort, außer dass ref
die Variable vor der Übergabe initialisiert werden muss. Um einen out
Parameter zu verwenden, müssen sowohl die Methodendefinition als auch die aufrufende Methode das out
Schlüsselwort explizit verwenden . Zum Beispiel: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Obwohl als out
Argumente übergebene Variablen vor der Übergabe nicht initialisiert werden müssen, muss die aufgerufene Methode einen Wert zuweisen, bevor die Methode zurückgegeben wird.
Obwohl die Schlüsselwörter ref
und out
ein unterschiedliches Laufzeitverhalten verursachen, werden sie zur Kompilierungszeit nicht als Teil der Methodensignatur betrachtet. Daher können Methoden nicht überladen werden, wenn der einzige Unterschied darin besteht, dass eine Methode ein ref
Argument und die andere ein out
Argument verwendet. Der folgende Code wird beispielsweise nicht kompiliert: 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) { }
}
Das Überladen kann jedoch erfolgen, wenn eine Methode ein ref
oder- out
Argument verwendet und die andere keines verwendet, wie folgt: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Eigenschaften sind keine Variablen und können daher nicht als out
Parameter übergeben werden.
Informationen zum Übergeben von Arrays finden Sie unter Übergeben von Arrays mit ref
und out
(C # -Programmierhandbuch).
Sie können die Schlüsselwörter ref
und nicht out
für die folgenden Arten von Methoden verwenden:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Beispiel
Das Deklarieren einer out
Methode ist nützlich, wenn eine Methode mehrere Werte zurückgeben soll. Im folgenden Beispiel werden out
drei Variablen mit einem einzigen Methodenaufruf zurückgegeben. Beachten Sie, dass das dritte Argument null zugewiesen ist. Dadurch können Methoden optional Werte zurückgeben. 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
kann nicht gelesen werden, bevor sie zugewiesen wurde.ref
hat diese Einschränkung nicht. Da ist also das.