Proč musím přiřadit všechna pole uvnitř konstruktoru struct je?

hlasů
4

Duplikát:

Proč Musím inicializovat Všechna pole v mém C # struct s jinou než výchozí konstruktor?


Pokud se v konstruktoru struct jako

internal struct BimonthlyPair
{
    internal int year;
    internal int month;
    internal int count;    

    internal BimonthlyPair(int year, int month)
    {
        this.year = year;
        this.month = month;
    }
}

Nemám inicializovat pole (počet v tomto případě), dostanu chybu:

Poli ‚Počet‘ musí být plně přiřazena před ovládací prvek se vrátí k volajícímu

Ale když jsem přiřadit všechny oblasti, včetně počtu v tomto případě, co se něco podobného

this.year = year;
this.month = month;
this.count = 0;

zmizela chyba.

Myslím, že se to stane, protože C # není inicializovat struct pole, když někdo vytvoří nový struct objekt. Ale proč? Pokud je mi známo, je inicializovat proměnné v některých jiných souvislostech, tak proč struct je jiný scenérie?

Položena 25/04/2009 v 14:43
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
8

Použijete-li výchozí konstruktor, je implicitní záruku, že celá hodnota struct je vyklizen.

Když si vytvoříte vlastní konstruktor, můžete zdědit této záruky, ale žádný kód, který prosazuje, takže je jen na vás, aby se ujistil, že celá struct má hodnotu.

Odpovězeno 25/04/2009 v 14:58
zdroj uživatelem

hlasů
6

Nemohu odpovědět proč. Ale můžete ji opravit pomocí: toto ().

internal struct BimonthlyPair
{
    internal int year;
    internal int month;
    internal int count;

    internal BimonthlyPair(int year, int month)
        : this()  // Add this()
    {
        this.year = year;
        this.month = month;
    }
}
Odpovězeno 25/04/2009 v 14:53
zdroj uživatelem

hlasů
0

Vzhledem k tomu, na rozdíl od tříd, které jsou uloženy v haldě, The structs jsou hodnotové objekty a bude uložen v zásobníku. Je to stejný princip přiřazení lokální proměnné před jeho použitím.

Odpovězeno 25/04/2009 v 14:56
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more