宣告一個結構

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 例項欄位可以通過引數化建構函式設定,也可以在 struct 構造後單獨設定。

  • 私有成員只能由建構函式初始化。

  • struct 定義了一個隱式繼承自 System.ValueType 的密封型別。

  • 結構不能從任何其他型別繼承,但它們可以實現介面。

  • 在分配時複製結構,這意味著所有資料都將複製到新例項,而其中一個資料的更改不會被另一個例項反映。

  • 結構不能是 null,儘管它可以用作可空型別:

    Vector v1 = null; //illegal
    Vector? v2 = null; //OK
    Nullable<Vector> v3 = null // OK
    
  • 可以使用或不使用 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;
    

    但是,必須使用 new 運算子才能使用初始值設定項:

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

結構可以宣告類可以宣告的所有內容,但有一些例外:

  • 結構不能宣告無引數建構函式。struct 例項欄位可以通過引數化建構函式設定,也可以在 struct 構造後單獨設定。私有成員只能由建構函式初始化。
  • 結構不能將成員宣告為受保護的,因為它是隱式密封的。
  • 結構欄位只有在 const 或 static 時才能初始化。