单纯从语言角度上看,C#中struct是个怪胎。
1、它是值类型,不可以被继承,也不可以从别的类或者struct继承,那么一个struct就是完全分离的一个数据结构,从OOP的概念讲是一种倒退。
2、但是可以实现interface。
3、可以declare and instantiate inline,是放在stack上的。
4、但是也可以用new来instantiate,但是仍然是值类型,仍然是在stack上分配内存。
5、不可以有默认构造方法,就是没有参数的构造方法。这点*尤其*让我不解,难道所有struct实例都要分别来初始化吗?比如:
struct XYZ
{
private int x, y, z;
public XYZ()
{
x = 1;
y = 2;
z = 3;
}
}
虽然在默认构造方法里初始化一些数据是很正常的代码需求,但是C#是不用允许这种初始化的。
6、如果声明了其他构造方法,这些构造方法只能用new来调用,而不能像默认构造方法一样declare and instantiate。头晕中。
7、如果某个类成员是struct类型,new这个类的实例的时候,这个struct类成员则instantiate到heap上。
真的很奇怪。