6

我已经创建了一个像这样的对象数组。但是要为对象赋值,我必须在数组的每个位置实例化每个对象吗?为什么我需要这个?

这是我的方法

 StageObject[] StageSplitDate = new StageObject[Stages.Rows.Count];
            for (int i = 0; i < Stages.Rows.Count; i++)
            {
                StageSplitDate[i] = new StageObject();
                StageSplitDate[i].StageId = "String Value";
                StageSplitDate[i].FromTime = StartTime;
                StartTime =StartTime.AddMinutes(Convert.ToDouble(10));
                StageSplitDate[i].ToTime = StartTime;
            }
            return StageSplitDate;

和对象等级

 public class StageObject
    {
        public string StageId { get; set; }
        public DateTime FromTime { get; set; }
        public DateTime ToTime { get; set; }
    }
4

5 回答 5

3

我必须在数组的每个位置实例化每个对象?

您没有两次实例化数组元素。在第一行中,您实例化了一个数组StageSplitDate ,其中每个元素都设置为 null。默认情况下,每个数组(引用类型)元素都初始化为 null。要进一步使用它,您还需要实例化数组中的每个对象,否则您将获得空引用异常。

对于 C#

数组(C# 编程指南)- MSDN

数值数组元素的默认值设置为零,参考元素设置为 null

(因为这个问题最初是为java标记的)

对于 JAVA

4.12.5。变量的初始值

  • 每个类变量、实例变量或数组组件在创建时都使用默认值进行初始化(第 15.9 节、第 15.10 节):
  • 对于所有引用类型(第 4.3 节),默认值为 null
于 2013-03-15T04:32:46.067 回答
2

您的数组是一个StageObject 引用数组。StageObjects 本身还不存在。本质上,数组中的每个条目只是“指向”或“引用”一个StageObject.

在调用 之前new StageObject(),每个数组元素都是null,这意味着它没有引用任何内容。

于 2013-03-15T04:32:16.157 回答
2

想想一个数组是一个书架的类比。想要书架,买书架只是第一步;然后,您需要购买每本书并将其放在书架上。这里的想法相同:分配数组会为您提供一个空容器,然后您需要创建每个对象并将其放入容器中。

为什么会这样?因为最初为空的数组通常是您想要的——即使不是,除非您的对象只有一个无参数的构造函数,否则 Java 甚至不知道如何构造每个对象。

于 2013-03-15T04:38:20.827 回答
1

StageObject[] StageSplitDate = new StageObject[Stages.Rows.Count];

上面的语句只使引用数组StageObject初始化为null,但实际上并没有初始化对象StageObject

StageSplitDate[i] = new StageObject();

上面的语句正在创建类型的对象StageObject并将引用分配给StageSplitDate元素

于 2013-03-15T04:31:32.903 回答
1

new StageObject[Stages.Rows.Count]创建一个StageObject包含Stages.Rows.Count空引用的新引用数组。您希望每个元素都指向一个StageObject. 为此,您需要创建一些StageObject实例。

于 2013-03-15T04:35:52.003 回答