结构是一种用关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,结构是值类型。可以说类是结构体的升级类型,为了提供更好的数据保护。类在结构体之上又新增了一系列新特性,如大家所熟知的抽象,封装等。
区别:
1.结构的构造函数和类的构造函数不同。
a.结构不能包含显式的无参数构造函数。结构成员将自动初始化为它们的默认值。
b.结构不能包含以下形式的初始值设定类:base(argument-list);
2.对于结构中的实例字段成员,不能在声明时赋值初始化。
3.声明了结构类型后,可以使用new运算符创建构造对象,也可以不使用new关键字。如果不使用new,那么在初始化所有字段之前,字段将保持未赋值状态且对象不可用。
4.结构体在继承上跟类的一点点差别,
struct A { };
class B : A{ }; //private继承
struct C : B{ }; //public继承
这是由于class默认是private,struct默认是public。
5.什么时候用结构呢?结构使用简单,并且很有用,但是要牢记:结构在堆栈中创建,是值类型,而类是引用类型。每当需要一种经常使用的类型,而且大多数情况下该类型只是一些数据时,使用结构能比使用类获得更佳性能。
6.结构体的成员默认访问是public属性,而类的成员默认访问是private属性。
(备注)一般说来,struct和class可以换用(当然要注意一些语法问题)。 而struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体,对私有成员进行保护,还提供与外界的接口。