结构体的特点:
1.结构体可以有方法、域、属性、索引器、操作方法、事件。
2.结构体可以定义构造函数(实例和静态构造函数),但是不能构造析构函数。(虽然说可以定义构造函数,但是不能定义无参构造函数,因为结构体的无参构造函数是自动定义的且不能被改变,默认的无参构造函数会一直存在,默认的无参构造函数不会因为定义了有参构造函数就消失,这里说的都是实例构造函数)
3.结构体不能继承其他结构体或者其他类。
4.结构体不能用于作为其他结构体或者类的基类。
5.结构体类型总是隐式密封的,不能指定为密封的和抽象的,因此在定义结构时不能使用sealed和abstract关键字。
6.结构体成员不能被指定为抽象的、虚拟的、或者保护的对象,因此结构体的成员不能使用如下访问修饰符:abstract、virtual和protected
7.结构体的函数成员不能声明为abstract和virtual,但是可以使用override关键字,用以覆写它的基类System.ValueType中的方法。
8.结构体可以实现一个或多个接口。
9.使用New运算符创建结构体对象时,将创建该结构体对象,并且调用适当的构造函数。
10.如果不使用New运算符创建结构体对象,那么在初始化所有字段前,字段将保持未赋值状态,且对象不可用。
结构体与类的区别:
1.结构体是值类型,存储在栈上,类是引用类型,存储在托管堆上,结构体在声明的时候就已经为其分配栈上的内存了,而类需要用new为其分配堆上面的内存
2.结构体是隐式密封的,不能用 sealed 和 abstract 修饰,结构体不能被继承,类可以被继承
3.结构体中的实例字段只能声明,不能赋值,而类没有限制,结构体只声明没有用 new 进行初始化时,可以给他的实例字段赋值,而类不行
4.结构体不能显示给出默认构造函数(无参数的构造),无论有没有自定义构造,默认构造都隐式存在,而类中有自定义构造函数时,默认构造会被隐藏,要想调用默认构造,必须显示给出默认构造
5.结构体的自定义构造函数必须初始化所有的实例字段和没有初始化的非静态属性,类没有限制