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

  • Marina and The Diamonds

    Marina and T

    8 Temmuz 2008
  • Tube Time

    Tube Time

    14 Mayıs 2013
  • Turkish Airlines

    Turkish Airl

    11 AĞUSTOS 2006