C# Language Déclarer une structure


Exemple

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 champs d'instance de struct peuvent être définis via un constructeur paramétré ou individuellement après la construction d'une struct .

  • Les membres privés ne peuvent être initialisés que par le constructeur.

  • struct définit un type scellé qui hérite implicitement de System.ValueType.

  • Les structures ne peuvent hériter d'aucun autre type, mais elles peuvent implémenter des interfaces.

  • Les structures sont copiées lors de l'affectation, ce qui signifie que toutes les données sont copiées dans la nouvelle instance et que les modifications apportées à l'une d'entre elles ne sont pas prises en compte par l'autre.

  • Une structure ne peut pas être null , bien qu'elle puisse être utilisée comme un type nullable:

    Vector v1 = null; //illegal
    Vector? v2 = null; //OK
    Nullable<Vector> v3 = null // OK
    
  • Les structures peuvent être instanciées avec ou sans l'opérateur new .

    //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;
    

    Cependant, le new opérateur doit être utilisé pour utiliser un initialiseur:

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

Une structure peut déclarer tout ce qu'une classe peut déclarer, à quelques exceptions près:

  • Une structure ne peut pas déclarer un constructeur sans paramètre. struct champs d'instance struct peuvent être définis via un constructeur paramétré ou individuellement après la construction d'une struct . Les membres privés ne peuvent être initialisés que par le constructeur.
  • Une structure ne peut pas déclarer les membres protégés, car elle est implicitement scellée.
  • Les champs de structure ne peuvent être initialisés que s'ils sont const ou statiques.