结构
结构是值类型,不是引用类型。它们存储在栈中或者储存为内联,其生命周期的限制与简单的数据类型一样。
分配结构比创建类的实例开销较小,所以用结构代替类时可以提高性能,但是需要注意装箱和拆箱的资源开销。
结构可以像类一样实现接口。
1.结构和类的区别
类是引用类型;结构是值类型。
结构是隐式密封的,意味着结构是不能被派生的。但结构派生自System.ValueType类。
复制类变量时只有引用被复制
结构赋值时,将一个结构中的值复制到另一个结构中。
2.结构的特点
结构是值类型的,所以结构类型的变量是不能为null的。
两个结构类型的变量不能引用同一对象。
3.结构的构造函数
结构可以有实例构造函数和静态构造函数,但是没有析构函数。
- 实例构造函数
每个结构都含有预定义的无参构造函数,不能删除或者重定义它们;预定义的无参构造函数用来把结构的成员为该类型的默认值。值类型被设置为默认值,引用类型被设置为null。
结构和类不同,每个结构都含有预定义的无参构造函数,而类仅在没有其他构造函数时才会提供隐式无参构造函数。
结构可以创建其他含参的构造函数,调用构造函数时,需要使用new运算符,但结构并没有在堆中分配内存。
如果没有使用new运算符创建结构实例,就必须显示显式设置数据成员的值,否则就不能使用数据成员的值和函数成员。
- 静态构造函数
结构的静态构造函数创建并初始化静态数据成员,而且不能引用实例成员。静态构造函数在调用显式声明的构造函数或者引用静态成员时被调用。
4.返回值和参数
返回值 当结构被作为返回值时,创建复制实例从函数成员返回。
值参 当结构被用作值参时,创建一个新的结构,其尽在方法体内执行。
ref和out参数 结构的引用被传入方法中,此时结构的数据成员可能会被改变。