结构体的声明和使用

结构体是值类型,无法派生其他结构。
结构体变量不能为null,两个结构体变量不能引用同一对象

1
2
3
4
5
struct Simple{
public int a;
public int b;
}
Simple simple = new Simple();

把一个结构体赋值给另一个结构体,就是将一个结构体的值复制给你另一个结构体。
结构体可以有实例构造函数和静态构造函数,但不允许有析构函数。
结构体隐式含有一个无参构造函数,不可删除或重定义,结构体的值成员设置为默认值,引用成员设置为null。
对于类,编译器只在没有声明其他构造函数时提供隐式的无参构造函数。
可以不使用new来创建结构体实例,但这样做只有显式设置数据成员后才能使用它们的值并且在对所有数据成员赋值后,才能调用结构的函数成员:

1
2
3
4
Simple s1,s2;
s1.a=3;
s1.b=4;
Console.WriteLine(s1.a);

注意:声明结构体时不允许使用实例属性和字段初始化语句,但是静态属性和字段可以在声明时初始化即使结构体本身不是静态的。

1
2
3
4
struct Simple{
public int a = 3;//报错
public static int b = 4;
}

结构本身派生自System.ValueType,当创建一个和基类成员同名的成员时可以使用new或override修饰符。

结构作为返回值和参数

返回值:
当结构作为返回值时将创建副本从函数成员返回。
值参数:
创建副本传入函数。
ref和out:
传入结构的指针。

总结

结构代替类有时可以提高性能,但同时也要注意装箱拆箱的成本。
可以使用分部结构就像分部类一样。
结构可以实现接口。