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

anahtar out sözcüğü, bağımsız değişkenlerin başvuruyla geçirilmesine neden olur. Resmi parametreyi değişken olması gereken bağımsız değişken için diğer ad yapar. Başka bir deyişle, parametredeki herhangi bir işlem bağımsız değişkende yapılır. Bu , başv anahtar sözcüğü gibidir, ancak ref değişkenin geçirilmeden önce başlatılmasını gerektirir. Aynı zamanda in anahtar sözcüğüne benzer, ancak çağrılan yöntemin in bağımsız değişken değerini değiştirmesine izin vermez. Parametre out kullanmak için hem yöntem tanımı hem de çağırma yöntemi açıkça anahtar sözcüğünü out kullanmalıdır. Ö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 bir tür parametresiyle de kullanılabilir. Bu bağlamda anahtar sözcüğün out kullanımı hakkında daha fazla bilgi için bkz. (Genel Değiştirici).

Bağımsız değişken olarak out geçirilen değişkenlerin bir yöntem çağrısında geçirilmeden önce başlatılması gerekmez. Ancak, yöntem döndürmeden önce bir değer atamak için çağrılan yöntem gereklidir.

in, refve out anahtar sözcükleri, aşırı yükleme çözümlemesi amacıyla yöntem imzasının bir parçası olarak kabul edilmez. Bu nedenle, tek fark bir yöntemin veya in bağımsız değişkeni alması ref ve diğerinin bağımsız değişken almasıysa out yöntemler aşırı yüklenemez. Örneğin aşağıdaki kod derlenmez:

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

Ancak, bir yöntem bir ref, inveya out bağımsız değişkeni alırsa ve diğerinde bu değiştiricilerin hiçbiri yoksa, aşırı yükleme yasaldır:

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

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

Özellikler değişken değildir ve bu nedenle parametre olarak out geçirilemez.

Aşağıdaki yöntem türleri için , refve out anahtar sözcüklerini kullanamazsınızin:

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

  • Verim dönüşünü veya yield break deyimini içeren yineleyici yöntemleri.

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

  • Anahtar out sözcüğü bir uzantı yönteminin ilk bağımsız değişkeninde kullanılamaz.
  • Bağımsız ref değişken bir yapı olmadığında veya bir yapı olması kısıtlanmamış genel bir tür olduğunda, bir uzantı yönteminin ilk bağımsız değişkeninde anahtar sözcük kullanılamaz.
  • in İlk bağımsız değişken bir yapı olmadığı sürece anahtar sözcük kullanılamaz. Anahtar in sözcük, yapı olarak kısıtlanmış olsa bile herhangi bir genel türde kullanılamaz.

Parametreleri bildirme out

Bir yöntemi bağımsız değişkenlerle out bildirmek, birden çok değer döndürmek için klasik bir geçici çözümdür. Benzer senaryolar için değer demetlerini göz önünde bulundurun. Aşağıdaki örnek, tek bir yöntem çağrısıyla üç değişken döndürmek için kullanır out . Üçüncü bağımsız değişken null olarak atanır. Bu, yöntemlerin isteğe bağlı olarak değer döndürmesini 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 içeren bir out yöntemi çağırma

Değişkeni bağımsız değişken olarak geçirmeden önce ayrı bir out deyimde bildirebilirsiniz. Aşağıdaki örnek, bir dizeyi sayıya dönüştürmeye çalışan Int32.TryParse yöntemine geçirilmeden önce adlı number bir değişken bildirir.

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

Değişkeni, ayrı bir değişken bildirimi yerine yöntem çağrısının bağımsız değişken listesinde de bildirebilirsiniz out . Bu, daha kompakt, okunabilir bir kod üretir ve yöntem çağrısından önce değişkene yanlışlıkla bir değer atamanızı önler. Int32.TryParse yöntemi çağrısındaki değişkeni tanımlaması number dışında, aşağıdaki örnek önceki örneğe benzer.

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 number değişkeni kesin olarak olarak intyazıldı. Aşağıdaki örnekte olduğu gibi örtük olarak yazılan bir yerel değişken de bildirebilirsiniz.

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.