Generika verwendet in struct und class

Davon ausgehen, dass wir haben die folgenden struct - definition, die verwendet Generika:

public struct Foo<T>
{
    public T First; 
    public T Second;

    public Foo(T first)
    {
        this.First = first;
    }

}

Der compiler sagt

'Foo.Zweite " muss vollständig zugewiesen, bevor die Kontrolle an den Aufrufer zurückgegeben wird

Jedoch, wenn Foo ist eine Klasse, dann ist es erfolgreich kompiliert.

public class Foo<T>
{
    public T First; 
    public T Second;

    public Foo(T first)
    {
        this.First = first;
    }

}

Warum? Warum der compiler behandelt Sie anders? Außerdem, wenn kein Konstruktor definiert wird, in der ersten Foo dann kompiliert. Warum dieses Verhalten?

  • Wenn Sie eine struct, sollten Sie wirklich machen, es unveränderlich. Siehe mutable structs sind böse. Eine Möglichkeit, so dass es unveränderlich ist, zu sagen public readonly T First; public readonly T Second;. Dann ist es natürlich weisen alle Instanz-Felder in der Instanz-Konstruktor. Wenn auf der anderen Seite, Sie wirklich nicht wollen, zu ordnen, um Sie alle Felder, die Kette (implizite und Magische) parameterlosen Konstruktor, der natürlich, wie: : this() (aber ich denke, Sie wissen, dass).
Schreibe einen Kommentar