宣告一個結構
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 時才能初始化。