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 // 好
可以使用或不使用new运算符来实例化结构。
//这两个都是可以接受的
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 }; // 好
Vector v2 { X=1, Y=2, Z=3 }; // 非法
结构可以声明类可以声明的所有内容,但有一些例外:
结构不能声明无参数的构造函数。struct实例字段可以通过参数化的构造函数设置,也可以在struct构造后单独设置。私有成员只能由构造函数初始化。
由于结构是隐式密封的,因此无法将成员声明为受保护的结构。
如果结构字段是const或static,则只能对其进行初始化。