Możesz użyć out
kontekstowego słowa kluczowego w dwóch kontekstach (każdy jest linkiem do szczegółowych informacji), jako modyfikator parametru lub w deklaracjach parametrów typu ogólnego w interfejsach i delegatach. W tym temacie omówiono modyfikator parametrów, ale ten drugi temat zawiera informacje na temat deklaracji parametrów typu ogólnego.
Słowo out
kluczowe powoduje przekazanie argumentów przez odwołanie. To jest jak ref
słowo kluczowe, z tą różnicą, że ref
wymaga zainicjowania zmiennej przed jej przekazaniem. Aby użyć out
parametru, zarówno definicja metody, jak i metoda wywołująca muszą jawnie używać out
słowa kluczowego. Na przykład: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Chociaż zmienne przekazane jako out
argumenty nie muszą być inicjowane przed przekazaniem, wywoływana metoda jest wymagana do przypisania wartości przed jej zwróceniem.
Chociaż słowa kluczowe ref
i out
powodują różne zachowanie w czasie wykonywania, nie są one uważane za część sygnatury metody w czasie kompilacji. Dlatego metod nie można przeciążać, jeśli jedyną różnicą jest to, że jedna metoda przyjmuje ref
argument, a druga przyjmuje out
argument. Na przykład następujący kod nie zostanie skompilowany: 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) { }
}
Przeciążenie można jednak wykonać, jeśli jedna metoda pobiera argument ref
lub, out
a druga nie używa żadnego z nich, na przykład: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Właściwości nie są zmiennymi i dlatego nie mogą być przekazywane jako out
parametry.
Aby uzyskać informacje o przekazywaniu tablic, zobacz Przekazywanie tablic przy użyciu ref
iout
(Podręcznik programowania w języku C #).
Nie można używać słów kluczowych ref
i out
do następujących rodzajów metod:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Przykład
Zadeklarowanie out
metody jest przydatne, gdy metoda ma zwracać wiele wartości. W poniższym przykładzie użyto out
do zwrócenia trzech zmiennych za pomocą pojedynczego wywołania metody. Zauważ, że trzeci argument jest przypisany do null. Umożliwia to metodom opcjonalne zwracanie wartości. DO#
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
nie może zostać odczytana przed przypisaniem do niej.ref
nie ma tego ograniczenia. Więc to jest to.