C# Language Dichiarazione di una struttura


Esempio

public struct Vector 
{
    public int X;
    public int Y;
    public int Z;
}

public struct Point
{
    public decimal x, y;
    
    public Point(decimal pointX, decimal pointY)
    {
        x = pointX;
        y = pointY;
    }
}
  • struct campi istanza struct possono essere impostati tramite un costruttore parametrizzato o singolarmente dopo la costruzione di struct .

  • I membri privati ​​possono essere inizializzati solo dal costruttore.

  • struct definisce un tipo sealed che eredita implicitamente da System.ValueType.

  • Le strutture non possono ereditare da nessun altro tipo, ma possono implementare interfacce.

  • Le strutture vengono copiate sull'assegnazione, ovvero tutti i dati vengono copiati nella nuova istanza e le modifiche a una di esse non vengono riflesse dall'altra.

  • Una struct non può essere null , sebbene possa essere usato come un tipo nullable:

    Vector v1 = null; //illegal
    Vector? v2 = null; //OK
    Nullable<Vector> v3 = null // OK
    
  • Le strutture possono essere istanziate con o senza l'utilizzo del new operatore.

    //Both of these are acceptable
    Vector v1 = new Vector();
    v1.X = 1;
    v1.Y = 2;
    v1.Z = 3;
    
    Vector v2;
    v2.X = 1;
    v2.Y = 2;
    v2.Z = 3;
    

    Tuttavia, è necessario utilizzare il new operatore per utilizzare un inizializzatore:

    Vector v1 = new MyStruct { X=1, Y=2, Z=3 }; // OK
    Vector v2 { X=1, Y=2, Z=3 }; // illegal
    

Una struct può dichiarare tutto ciò che una classe può dichiarare, con alcune eccezioni:

  • Una struct non può dichiarare un costruttore senza parametri. struct campi istanza struct possono essere impostati tramite un costruttore parametrizzato o singolarmente dopo la costruzione di struct . I membri privati ​​possono essere inizializzati solo dal costruttore.
  • Una struct non può dichiarare i membri come protetti, dal momento che è implicitamente sigillato.
  • I campi Struct possono essere inizializzati solo se costanti o statici.