SORU
7 Ocak 2009, ÇARŞAMBA


Özellikleri ve Yapıları'gitmez otomatik?

this post, ben cevap verirken bazı küçük yapıların çevresinde tekme aşağıdaki beklenmedik bir şekilde geldi:

Aşağıdaki yapı, int bir alan kullanarak tamamen yasal

struct MyStruct
{ 
    public MyStruct ( int size ) 
    { 
        this.Size = size; // <-- Legal assignment.
    } 

    public int Size; 
}

Ancak, aşağıdaki yapıda, otomatik özelliğini kullanarak derleme değil:

struct MyStruct
{ 
    public MyStruct ( int size ) 
    { 
        this.Size = size; // <-- Compile-Time Error!
    } 

    public int Size{get; set;}
}

Hata döndürülür "'bu' nesne ya da alanların hepsi atanır önce kullanılan". Bu bir yapı için standart bir prosedür olduğunu biliyorum: herhangi bir özelliği için bir alan doğrudan tayin edilmesi gerekir desteğini (ve özelliğin set erişimcisine) yapı bloğu içinde.

Çözüm açık destek alanı kullanmak için:

struct MyStruct
{ 
    public MyStruct(int size)
    {
        _size = size;
    }

    private int _size;

    public int Size
    {
        get { return _size; }
        set { _size = value; }
    }
}

(VB.NET tüm alanlar ilk oluşturulduğunda otomatik olarak 0/null/yanlış olarak başlatılır çünkü VB.NET böyle bir durum söz konusu değildir unutmayın.)

Bu C yapılar ile otomatik özellikleri kullanırken talihsiz bir sınırlama gibi görünüyor#. Kavramsal olarak düşünme, merak ediyordum bu olmazdı makul bir yer için orada olmak için bir istisna sağlayan özelliği set erişimci demem içinde bir yapı kurucu, en az bir otomatik özelliği?

Bu önemsiz bir durum, neredeyse bir kenar-case, ama başkalarının ne düşündüğünü merak ediyorum bu konuda

CEVAP
7 Ocak 2009, ÇARŞAMBA


C# 6 itibaren: bu artık bir sorun


Bu iş için varsayılan yapıcı aramalısın# 6,: Becore C

public MyStruct(int size) : this()
{
    Size = size;
}

Daha büyük bir sorun burada değişken bir yapı var. Buaslaiyi bir fikir. Ben bunu yapmak:

public int Size {get; private set;}

Değilteknik olarakdeğişmez, ama yeterince yakın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amir Parmar

    Amir Parmar

    25 Kasım 2010
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009
  • TheDroidDemos

    TheDroidDemo

    15 ŞUBAT 2011