SORU
1 Mayıs 2009, Cuma


Hangisi daha iyi, değer veya parametre getirisi nedir?

Eğer bir metot bir değer almak istiyorsak, ya da dönüş değeri, bu gibi kullanabilirsiniz:

public int GetValue();

ya da:

public void GetValue(out int x);

Gerçekten aralarındaki farkı anlamıyorum ve bu yüzden hangisinin daha iyi olduğunu bilmiyorum. Bana bunu izah EDEBİLİR MİSİN?

Teşekkür ederim.

CEVAP
1 Mayıs 2009, Cuma


Dönüş değerleri neredeyseher zamanyöntem dönmek için başka bir şey yok ne zaman doğru seçim. (Aslında, istediğim bir durum düşünemiyorumhiçeğer seçme şansım olsaydı out bir parametre geçersiz bir yöntem.)

Her şey bir yana, bu değişken ayrı ayrı bildirmek zorunda arayan durur:

int foo;
GetValue(out foo);

vs

int foo = GetValue();

Çıkış değerleri de böyle bir yöntem zincirleme önlemek:

Console.WriteLine(GetValue().ToString("g"));

(Nitekim bu özellik ayarlayıcıları ile ilgili sorunlardan biri de, oluşturucu desen oluşturucu, *13 örneğin*.) geri dönmek için hangi yöntemleri kullanır.

Ayrıca, yansıma parametreleri ile kullanmak ve genellikle test daha yapmak için biraz daha zor. (Daha fazla çaba genellikle kolay alay parametreleri dışında değerler döndürmek için yapım içine konur). Temelde yaptıkları aklıma hiçbir şey yokdaha kolay...

Dönüş değerleri FTW.

EDİT: ne açısından... ..

Aslında bir değişken geçirdiğinizde bir "out" parametresivarbir değişken geçmek. (Dizi öğeleri değişkenleri olarak da sınıflandırılır.) Dediğiniz yöntemi "" depolama. için parametre yığını - değişken kullanır değişken yeni yok Değişken herhangi bir değişiklik hemen görülür. İşte size bir örnek farkı gösteren:

using System;

class Test
{
    static int value;

    static void ShowValue(string description)
    {
        Console.WriteLine(description   value);
    }

    static void Main()
    {
        Console.WriteLine("Return value test...");
        value = 5;
        value = ReturnValue();
        ShowValue("Value after ReturnValue(): ");

        value = 5;
        Console.WriteLine("Out parameter test...");
        OutParameter(out value);
        ShowValue("Value after OutParameter(): ");
    }

    static int ReturnValue()
    {
        ShowValue("ReturnValue (pre): ");
        int tmp = 10;
        ShowValue("ReturnValue (post): ");
        return tmp;
    }

    static void OutParameter(out int tmp)
    {
        ShowValue("OutParameter (pre): ");
        tmp = 10;
        ShowValue("OutParameter (post): ");
    }
}

Sonuçlar:

Return value test...
ReturnValue (pre): 5
ReturnValue (post): 5
Value after ReturnValue(): 10
Out parameter test...
OutParameter (pre): 5
OutParameter (post): 10
Value after OutParameter(): 10

Fark, "" adım - yani yerel değişken sonra ya da parametre değiştirildi. post ReturnValue Testi, Bu value statik değişken için hiç fark etmez. OutParameter testi, value değişken çizgi tmp = 10; ile değiştirilir

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • Jonathan D.

    Jonathan D.

    3 Kasım 2006