声明一个结构
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 时才能初始化。