类是在堆中创建的,某些时候,类中只包含极少的数据,因为管理堆造成的开销显得不合算。 所以C#中引入结构的概念是为了提高性能,提供给轻量级的“对象”,它是一个值类型,位于堆栈上;在语法上,结构和类是相似的。但是还是有很多不同的地方。主要体现在以下两个方面。
- 不能象类一样,给结构声明一个无参数的默认构造函数。必须给结构的每一个变量显示的声明构造函数。
struct Time
{
private int hours,minutes,seconds;
public Time(int hh,int mm)
{
hours = hh;
minutes = mm;
}//编译时报错,因为seconds未初始化
}
- 在一个类中,可以在声明的同时初始化实例字段,但在struct中不能这样做,比如如下代码:
struct Time
{
...
private int hours = 0;
private int minutes;
private int seconds;
}
总之,结构是为了实现值的概念,适用于适合复制的“轻量级”概念,而类适用于不适合复制的值的“重量级”概念。在.net framework中很多都是结构的例子,如:int long 和 float分别是System.Int32,System.Int64和 System.Single这三种结构的别名,也就是说你可以在这些结构上直接的调用方法,就像静态类一样。每一个结构都会提供一个ToString()方法。所以最好override这个方法,以便适应特定的需求。