C#声明一个结构
示例
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,尽管可以用作可为空的类型:
Vectorv1=null;//illegal
Vector?v2=null;//OK
Nullable<Vector>v3=null//好
可以使用或不使用new运算符来实例化结构。
//这两个都是可以接受的
Vectorv1=newVector();
v1.X=1;
v1.Y=2;
v1.Z=3;
Vectorv2;
v2.X=1;
v2.Y=2;
v2.Z=3;
但是,new必须使用运算符才能使用初始化程序:
Vectorv1=newMyStruct{X=1,Y=2,Z=3};//好
Vectorv2{X=1,Y=2,Z=3};//非法
结构可以声明类可以声明的所有内容,但有一些例外:
结构不能声明无参数的构造函数。struct实例字段可以通过参数化的构造函数设置,也可以在struct构造后单独设置。私有成员只能由构造函数初始化。
由于结构是隐式密封的,因此无法将成员声明为受保护的结构。
如果结构字段是const或static,则只能对其进行初始化。