结构体
结构体(Struct)和类(Class)类似,不同之处在于:
- 结构体是值类型,类是引用类型。
- 结构体不支持继承(除了隐式继承了
object
类,更精确地说,继承自System.ValueType
)。
类有的成员,结构体也可以有,除了以下内容:
- 无参数构造函数。
- 字段初始化器(字段初始化器而非对象初始化器,即在声明字段时直接对字段赋值)。
- 终结器。
virtual
或protected
成员。
结构体的构造语义
- 结构体隐式包含一个无法重写的无参数构造函数,将字段按位归零。
- 定义结构体的构造函数时,必须显式为每一个字段赋值。
- 结构体不支持字段初始化器。
public struct Point
{
int x, y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
Point p1 = new Point(); // p1.x and p1.y will be 0
Point p2 = new Point(1, 1); // p2.x and p2.y will be 1
以下包含三个编译时错误:
public struct Point
{
int x = 1; // Illegal: field initializer
int y;
public Point() {} // Illegal: parameterless constructor
public Point(int x) {this.x = x;} // Illegal: must assign field y
}