out parametresi değiştiricisi (C# Başvurusu)

anahtar out sözcüğü, bağımsız değişkenlerin başvuruyla geçirilmesine neden olur. Biçimsel parametreyi, değişken olması gereken bağımsız değişken için diğer ad yapar. Başka bir deyişle, parametresinde yapılan herhangi bir işlem bağımsız değişkende yapılır. Bu, ref anahtar sözcüğüne benzer ancak ref değişkenin geçirimeden önce başlatılmasını gerektirir. Ayrıca in anahtar sözcüğüne benzer, ancak çağrılan yöntemin bağımsız değişken in değerini değiştirmesine izin vermez. Bir parametre kullanmak out için hem yöntem tanımı hem de çağıran yöntemin anahtar sözcüğünü açıkça out kullanması gerekir. Örnek:

int initializeInMethod;
OutArgExample(out initializeInMethod);
Console.WriteLine(initializeInMethod);     // value is now 44

void OutArgExample(out int number)
{
    number = 44;
}

Not

anahtar out sözcüğü, tür parametresinin birlikte değişken olduğunu belirtmek için genel tür parametresiyle de kullanılabilir. Bu bağlamda anahtar sözcüğünün kullanımı hakkında daha out fazla bilgi için bkz. out (Genel Değiştirici).

Bağımsız değişken out olarak geçirilen değişkenlerin bir yöntem çağrısına geçirimeden önce başlatılmasına gerek yok. Ancak, yöntem döndürmeden önce bir değer atamak için çağrılır yöntemi gereklidir.

in, ref ve anahtar out sözcükleri, aşırı yükleme çözümlemesi amacıyla yöntem imzasının bir parçası olarak kabullanmaz. Bu nedenle, tek fark bir yöntemin veya bağımsız değişkeni, diğeri ise bağımsız değişken alıyorsa yöntemler ref in aşırı yük out olamaz. Örneğin aşağıdaki kod derlemayacak:

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) { }
}

Öte yandan, bir yöntem , veya bağımsız değişken alırsa ve diğeri bu değiştiricilerden hiçbiri yoksa, aşırı yükleme ref in out yasaldır, şöyle:

class OutOverloadExample
{
    public void SampleMethod(int i) { }
    public void SampleMethod(out int i) => i = 5;
}

Derleyici, çağrı sitesinde parametre değiştiricilerini yöntem çağrısında kullanılan parametre değiştiricileri ile eşleştirerek en iyi aşırı yüklemeyi seçer.

Özellikler değişken değildir ve bu nedenle parametre olarak out geçir kullanılamaz.

Aşağıdaki yöntem türleri için in ref , ve anahtar out sözcüklerini kullanasınız:

  • Zaman uyumsuz değiştiriciyi kullanarak tanımladığınız zaman uyumsuz yöntemler.

  • Bir deyimi veya deyimini içeren yield return yield break yöntemleri.

Ayrıca, uzantı yöntemleri aşağıdaki kısıtlamalara sahip olur:

  • anahtar out sözcüğü bir uzantı yönteminin ilk bağımsız değişkende kullanılamaz.
  • Bağımsız değişken bir yapı veya bir yapı olacak şekilde kısıtlanmış genel bir tür değilken anahtar sözcüğü bir uzantı yönteminin ilk bağımsız ref değişkende kullanılamaz.
  • İlk in bağımsız değişken bir yapı olmadığı sürece anahtar sözcüğü kullanılamaz. Anahtar in sözcüğü, yapı olarak kısıtlanmış olsa bile hiçbir genel türde kullanılamaz.

Parametreleri out bildirerek

Bağımsız değişkenlerle yöntem out bildirerek birden çok değer dönmek için klasik bir geçici çözüm sağlanır. C# 7.0'dan itibaren, benzer senaryolar için değerupüllerini göz önünde bulundurarak. Aşağıdaki örnekte, tek out bir yöntem çağrısıyla üç değişken dönmek için kullanılır. Üçüncü bağımsız değişken null değerine atanır. Bu, yöntemlerin isteğe bağlı olarak değer dönmesini sağlar.

void Method(out int answer, out string message, out string stillNull)
{
    answer = 44;
    message = "I've been returned";
    stillNull = null;
}

int argNumber;
string argMessage, argDefault;
Method(out argNumber, out argMessage, out argDefault);
Console.WriteLine(argNumber);
Console.WriteLine(argMessage);
Console.WriteLine(argDefault == null);

// The example displays the following output:
//      44
//      I've been returned
//      True

Bağımsız değişken ile yöntem out çağırma

C# 6 ve önceki sürümlerde, bağımsız değişken olarak geçişmeden önce bir değişkeni ayrı bir deyimde tanımlamanız out gerekir. Aşağıdaki örnek, bir dizeyi sayıya dönüştürmeyi deneyen number Int32.TryParse yöntemine geçirimeden önce adlı bir değişken bildirer.

string numberAsString = "1640";

int number;
if (Int32.TryParse(numberAsString, out number))
    Console.WriteLine($"Converted '{numberAsString}' to {number}");
else
    Console.WriteLine($"Unable to convert '{numberAsString}'");
// The example displays the following output:
//       Converted '1640' to 1640

C# 7.0'dan başlayarak, değişkeni ayrı bir değişken bildirimi yerine yöntem çağrısının bağımsız değişken out listesinde bildirebilirsiniz. Bu daha küçük, okunabilir kod üretir ve ayrıca yöntem çağrısından önce değişkene yanlışlıkla bir değer atamayı da önler. Aşağıdaki örnek, number Int32.TryParse yöntemi çağrısında değişkeni tanımlaması dışında önceki örnekle benzerdir.

string numberAsString = "1640";

if (Int32.TryParse(numberAsString, out int number))
    Console.WriteLine($"Converted '{numberAsString}' to {number}");
else
    Console.WriteLine($"Unable to convert '{numberAsString}'");
// The example displays the following output:
//       Converted '1640' to 1640

Önceki örnekte değişkeni kesin number olarak bir olarak int yazıldı. Aşağıdaki örnekte olduğu gibi, örtülü olarak türe sahip bir yerel değişken de bildirsiniz.

string numberAsString = "1640";

if (Int32.TryParse(numberAsString, out var number))
    Console.WriteLine($"Converted '{numberAsString}' to {number}");
else
    Console.WriteLine($"Unable to convert '{numberAsString}'");
// The example displays the following output:
//       Converted '1640' to 1640

C# Dil Belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.

Ayrıca bkz.