SORU
8 ŞUBAT 2013, Cuma


'' değeri değişken değiştirme türleri

Görünüşe göre bu yapı (sınıflar değil): herhangi bir yerden this değerini değiştirebilirsiniz

struct Point
{
    public Point(int x, int y)
    {
        this = new Point();
        X = x; Y = y;
    }
    int X; int Y;
}

Ne daha önce görmüştüm ne de hiç gerekli. Neden kimse bunu yapmak istiyorsun ki? Bir özelliği uygulanacak haklı olması gerekir Eric Lippert reminds us. Harika bir kullanım şekli bu haklı ne olabilir? Bu çok değerli olduğu herhangi bir senaryo var mı?Eğer herhangi bir belge bulamadım1.

Ayrıca, kurucular zaten iyi bilinen alternatif bir sözdizimi var dediğin için, yani bu özellik bazen gereksiz

public Point(int x, int y)
    : this()
{
    X = x; Y = y;
}

Jeffrey Richter bir örnek özelliği CLR via C# 4th edition bunu buldum.< / ^ br . 1) Görünüşe göre C# specification.

CEVAP
8 ŞUBAT 2013, Cuma


Güzel soru!

Değer türleri, tanımı gereği, değeri kopyalanır. this aslında bir saklama yeri için bir takma ad değildiyapıcı bir kopyalama başlatılıyordeğişken başlatılıyor yerine başlatmak niyetinde. Hangi kurucu yerine daha kullanışlı hale getirmek istiyorsunuz! Ve benzer yöntemleri; Evet, değişken yapılar kötü ama eğer yapacak bir değişken yapı, daha sonra yine this olacak değişken olmak mutasyona uğramış bir kopyası değeri.

Bu tasarım kararının mantıklı bir sonucu olduğunu anlattığın davranış: this değişken adları bu yana, atayabilirsiniz, başka bir değişkene atayabilirsiniz.

Biraz garip doğrudan kendi alanları atamak yerine böyle this atamak. Daha da garip doğrudan this atama ve bu atama 0 üzerine yaz o zaman!

Alternatif tasarım hangisi önlemek this bir diğer alıcının depolama olurdu tahsis this kapalı kısa-süreli depolama havuzu, başlatılamıyor içinde decimal, ve sonra geri değer. Bu yaklaşım işin kötü yanı kopya elision iyileştirmeleri hemen hemen imkansız hale getirir, ve az ve yöntemleri garip bir şekilde tutarsız yapar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • GUN-TIME with Brandon

    GUN-TIME wit

    3 ŞUBAT 2009
  • Marques Brownlee

    Marques Brow

    21 Mart 2008