MyClass[] CLASS = new MyClass[5];
int[] STRUCT = new int[5];
new []为一个类和一个struct做了什么。显然,struct有一些重载的静态索引,导致它运行struct的默认构造函数。然而,类的new []似乎什么都不做,只是腾出空间来初始化类的实例。如何重载类的静态行为以运行默认构造函数。我知道如何使用for循环和其他方法来实现这一点。我的问题非常具体到新[]下面发生了什么。我知道结构需要一个默认值。但是,非可空类也不需要默认值,这就是为什么当你尝试使用它时会出错的原因?或者这是否告诉我所有类都可以为空?
答案 0 :(得分:2)
不,struct
的默认构造函数未运行。相反,在struct
情况下,内存被初始化为零。这意味着什么取决于数据类型。例如,参考字段(如类或字符串)变为null
,数字字段变为0
,布尔字段变为false
等。
这与课程的工作方式有很大不同。这就是为什么初始化class
数组时,您会看到null
值。基本上,它归结于此。 “空”class
变量(或您的案例中的数组)变为null
。但是,当您有一个“空”struct
时,您已经拥有了一些有效的东西。但是,它被初始化为空。
查看此内容的最简单方法是在一个类中有一个int
字段。这基本上以相同的方式工作。向类添加int
字段时,不需要初始化它。如果不初始化它,默认情况下它将获得值0
。 struct
在这方面的工作方式相同。
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/aa664471.aspx。
还有一些事项需要注意(回答评论中的问题):
默认构造函数不适用于结构,因为不允许它们具有默认构造函数。如果您尝试编译以下代码段,则会收到编译错误,告诉您:
struct MyStruct
{
public MyStruct()
{
}
}