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
, ref
ve 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
, in
veya 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 , ref
ve 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. Anahtarin
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 int
yazı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.