Sen kullanabilirsiniz outbir 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.
outAnahtar kelime nedenleri argümanlar referans olarak geçirilecek. Bu, refanahtar kelimenin aynısıdır, ancak refdeğişkenin geçirilmeden önce başlatılmasını gerektirir. Bir outparametre kullanmak için , hem yöntem tanımının hem de çağıran yöntemin outanahtar 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
}
}
outBağı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.
refVe outanahtar 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 refbağı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 refveya outbağı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 outparametre olarak iletilemezler.
Dizileri geçirme hakkında bilgi için, bkz. Dizileri Kullanarak Geçme refve out(C # Programlama Kılavuzu).
refVe outanahtar 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 outyö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;
}
}
outatanmadan önce okunamaz.refbu kısıtlamaya sahip değildir. İşte bu.