Sie können das outKontextschlü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 outSchlüsselwort bewirkt, dass Argumente als Referenz übergeben werden. Dies ist wie das refSchlüsselwort, außer dass refdie Variable vor der Übergabe initialisiert werden muss. Um einen outParameter zu verwenden, müssen sowohl die Methodendefinition als auch die aufrufende Methode das outSchlü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 outArgumente ü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 refund outein 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 refArgument und die andere ein outArgument 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 refoder- outArgument 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 outParameter übergeben werden.
Informationen zum Übergeben von Arrays finden Sie unter Übergeben von Arrays mit refund out(C # -Programmierhandbuch).
Sie können die Schlüsselwörter refund nicht outfü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 outMethode ist nützlich, wenn eine Methode mehrere Werte zurückgeben soll. Im folgenden Beispiel werden outdrei 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;
}
}
outkann nicht gelesen werden, bevor sie zugewiesen wurde.refhat diese Einschränkung nicht. Da ist also das.