Ви можете використовувати out
контекстне ключове слово у двох контекстах (кожен - посилання на детальну інформацію), як модифікатор параметрів або в загальних оголошеннях параметрів типу в інтерфейсах та делегатах. У цій темі обговорюється модифікатор параметрів, але ви можете переглянути цю іншу тему для інформації про загальні декларації параметрів типу.
У out
ключових словах причини аргументи , які будуть передаватися по посиланню. Це схоже на ref
ключове слово, за винятком того, що ref
вимагає ініціалізації змінної перед її передачею. Щоб використовувати out
параметр, і визначення методу, і метод виклику повинні явно використовувати out
ключове слово. Наприклад: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
Хоча змінні, передані як out
аргументи, не потрібно ініціалізувати перед передачею, викликаному методу потрібно призначити значення до повернення методу.
Хоча ref
і out
ключові слова викликають різну поведінку під час виконання, вони не вважаються частиною підпису методу під час компіляції. Тому методи не можуть бути перевантажені, якщо єдиною різницею є те, що один метод бере ref
аргумент, а інший бере out
аргумент. Наступний код, наприклад, не компілюється: 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) { }
}
Однак перевантаження може бути здійснено, якщо один метод бере аргумент ref
або out
аргумент, а інший не використовує жодного, як це: C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Властивості не є змінними, тому їх не можна передавати як out
параметри.
Інформацію про проходження масивів див. У розділі Передача масивів за допомогою ref
та out
(Посібник з програмування C #).
Ви не можете використовувати ключові слова ref
та out
ключові слова для таких типів методів:
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Приклад
Оголошення out
методу корисно, коли ви хочете, щоб метод повертав кілька значень. Наступний приклад використовує out
для повернення трьох змінних за допомогою одного виклику методу. Зауважте, що третій аргумент призначений для null. Це дає можливість методам повертати значення необов'язково. 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
не може бути прочитана, перш ніж її присвоїтиref
цього обмеження не має. Так ось це.