Sen kullanabilirsiniz out
bir parametre modifiye edici olarak veya arayüzleri ve delege de genel tür parametre beyanlarında, iki bağlamlarda (her ayrıntılı bilgilere bir bağlantı) bağlamsal anahtar kelime. Bu konuda parametre değiştirici açıklanmaktadır, ancak genel tip parametre bildirimleri hakkında bilgi için bu diğer konuyu görebilirsiniz.
out
Anahtar kelime nedenleri argümanlar referans olarak geçirilecek. Bu, ref
anahtar kelimenin aynısıdır, ancak ref
değişkenin geçirilmeden önce başlatılmasını gerektirir. Bir out
parametre kullanmak için , hem yöntem tanımının hem de çağıran yöntemin out
anahtar kelimeyi açıkça kullanması gerekir . Örneğin: C #
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
out
Bağımsız değişken olarak iletilen değişkenlerin geçirilmeden önce başlatılması gerekmese de, yöntem geri dönmeden önce bir değer atamak için çağrılan yöntem gereklidir.
ref
Ve out
anahtar sözcükleri farklı çalışma zamanı davranışlarına neden olsa da , derleme zamanında yöntem imzasının bir parçası olarak değerlendirilmezler. Bu nedenle, tek fark bir yöntemin ref
bağımsız değişken alması ve diğerinin bağımsız değişken alması yöntemin aşırı yüklenmesi mümkün değildir out
. Örneğin, aşağıdaki kod derlenmez: 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) { }
}
Bununla birlikte, bir yöntem bir ref
veya out
bağımsız değişken alırsa ve diğeri bu şekilde değilse, aşırı yükleme yapılabilir : C #
class OutOverloadExample
{
public void SampleMethod(int i) { }
public void SampleMethod(out int i) { i = 5; }
}
Özellikler değişken değildir ve bu nedenle out
parametre olarak iletilemezler.
Dizileri geçirme hakkında bilgi için, bkz. Dizileri Kullanarak Geçme ref
ve out
(C # Programlama Kılavuzu).
ref
Ve out
anahtar kelimeleri aşağıdaki yöntem türleri için kullanamazsınız :
Async methods, which you define by using the async modifier.
Iterator methods, which include a yield return or yield break statement.
Misal
Bir out
yöntemin bildirilmesi, bir yöntemin birden çok değer döndürmesini istediğinizde yararlıdır. Aşağıdaki örnek, out
üç değişkeni tek bir yöntem çağrısıyla döndürmek için kullanılır. Üçüncü bağımsız değişkenin null değerine atandığını unutmayın. Bu, yöntemlerin değerleri isteğe bağlı olarak döndürmesini sağlar. 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
atanmadan önce okunamaz.ref
bu kısıtlamaya sahip değildir. İşte bu.