1
MyClass[] CLASS = new MyClass[5];
int[] STRUCT = new int[5];

new [] 对类与结构的作用到底是什么。显然结构有一些重载的静态索引,导致它运行结构的默认构造函数。然而,一个类的 new [] 似乎除了腾出空间来初始化一个类的实例之外什么都不做。如何重载类的静态行为以运行默认构造函数。我知道如何使用 for 循环和其他方法来实现这一点。我的问题非常具体到新 [] 下发生的事情。我知道结构需要默认值。但是一个不可为空的类是否也需要一个默认值,这就是为什么当你尝试使用它时它会出错?或者这是否告诉我所有类实际上都是可以为空的?

4

1 回答 1

2

不,默认构造函数struct没有运行。相反,在这种struct情况下,内存被初始化为零。这意味着什么取决于数据类型。例如,引用字段(如类或字符串)变为null,数字字段变为0,布尔字段变为false,等等。

这与类的工作方式有很大不同。这就是为什么在初始化class数组时,您会看到null值。基本上,它归结为这一点。“空”class变量(或您的情况下的数组)变为null. 然而,当你有一个 "empty"struct时,你已经有了一些有效的东西。但是,它被初始化为空。

看到这一点的最简单方法是当您int在类中有一个字段时。这基本上以相同的方式工作。将int字段添加到类时,不需要对其进行初始化。当您不初始化它时,它0默认获取该值。struct在这方面的工作方式相同。

有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/aa664471.aspx 。

还有一些需要注意的事情(回答评论中的问题):

  • 类总是可以为空的。这意味着初始化数组的唯一方法是创建一个循环并为数组中的每个项目初始化一个新实例;
  • 默认构造函数不适用于结构,因为它们不允许有默认构造函数。如果您尝试编译以下代码片段,您将收到一个编译错误,告诉您:

    struct MyStruct
    {
        public MyStruct()
        {
        }
    }
    
于 2013-06-26T05:07:11.073 回答