类和结构是.NET Framework中的同样类型系统的两种基本构造。两者在本质上都属于数据结构,封装这一组整体作为一个逻辑单位的数据和行为。数据和行为是该类或结构的“成员”,它们包含着各自的方法,属性和事件等。
结构
结构是C#程序员用来定义自己的值类型的最普遍的机制。结构比枚举更强大,因为它提供方法,字段,操作符和访问控制等。
结构与类很相似,都表示可以包含数据成员和函数成员的数据结构。但是,与类不同,结构是一种值类型,并且不需要堆分配。结构类型的变量直接包含了该结构的数据,而类类型的变量所包含的只是对相应数据的一个引用(被引用的数据称为“对象”)。
结构对于具有值语义的小型数据结构尤为有用。复数,坐标系中的点或字典中的“键-值”对都是结构的典型示例。这些数据结构的关键之处在于:他们只是少量数据成员,不要求使用继承或引用标识,而且它们使用较方便(赋值时直接复制值而不是复制它的引用)。
结构的声明通过关键字struct来实现,声明格式为:
修饰符 struct 结构名
{
结构主体
};
结构声明包含一组可选额特性,后跟一组可选的结构修饰符,再跟关键字struct和一个用于命名结构的标识符,然后跟一个可选的结构接口规范,最后跟一个结构主体,根据需要后面还可以跟一个分号。
结构声明可以根据需要包含一个结构修饰符:new,public,protected,internal,private
结构的使用
为结构定义默认(无参数)构造函数是错误的,在结构体重初始化实例字段也是错误的。初始化结构成员可通过两种形式来完成:一是使用参数化构造函数,二是在声明结构后分别访问成员。对于任何私有成员或以其他方式设置为不可访问的成员,只能在构造函数中进行初始化。
如果使用new运算符创建结构对象,则会创建该结构对象,并调用适当的构造函数。与类不同的是,结构的实例化可以不使用new运算符。在此情况下不存在构造函数的调用,因而可以提高分配效率。但是,在初始化所有字段之前,字段将保持未赋值状态且对象不可用。










