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

  • edwin maldonado

    edwin maldon

    28 Mart 2009
  • Feel The Electricity!

    Feel The Ele

    20 ŞUBAT 2010
  • Alexey - servant of Christ

    Alexey - ser

    15 EYLÜL 2007