2013-03-15 49 views
6

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

这是我的方法

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; } 
    } 
+0

第一步,定义数组,为数组分配足够的内存以容纳元素。下一步,将实际值赋给数组中的一个位置。在为数组中的某个位置分配一个值之前,它没有值,它为空。 – MadProgrammer 2013-03-15 04:32:22

+0

出于好奇,为什么** C#**在这里标记? (O_o) – SudoRahul 2013-03-15 04:33:24

+3

@ R.J,更像是为什么Java,除非它现在有一个Convert.ToDouble方法。 – 2013-03-15 04:34:31

回答

3

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

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

对于C#

Arrays (C# Programming Guide) - MSDN

数字数组元素的默认值被设置为零,并且参考元件被设置为空

(由于议题最初标记为Java)

对于JAVA

4.12.5. Initial Values of Variables

  • 每个类变量,实例变量,或阵列组分与初始化创建时的默认值(第15.9节,第15.10节):
  • 对于所有引用类型(§4.3),默认值为空
+0

但是,在创建数组时,数组中的所有对象都已定义。一个数组不能有不同的数据类型。那么为什么我们应该为每个对象初始化它。声明数组本身时,它不是很好定义? – 2013-03-15 06:09:35

+0

@SubinJacob,多数民众赞成在语言设计师的选择它的方式,现在认为如果有需要实例化一个对象与一些默认值,*(例如 - 缺省构造函数丢失,而不是构造函数需要一些参数)*,如何你那么做。 – Habib 2013-03-15 06:11:53

+0

雅,这就是仪式。我明白了! – 2013-03-15 06:13:44

1

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

上面的语句只能使参考阵列StageObject其intialized用零但不实际initanstiate StageObject

StageSplitDate [I] =新StageObject()的对象;

上面的语句是创建StageObject类型的对象和分配参考StageSplitDate元件

2

你的阵列的StageObject引用阵列。 StageObject本身还不存在。基本上,阵列中的每个条目仅仅“指向”或“引用”StageObject

在您拨打new StageObject()之前,每个数组元素是null,这意味着它没有指什么。

1

new StageObject[Stages.Rows.Count]创建的含Stages.Rows.Count空引用StageObject引用新的数组。你希望每个元素指向一个StageObject。要做到这一点,你需要创建一些StageObject实例。

2

想想一个数组是书架的类比。如果你想要一个书架,只需要购买书架只是第一步;然后你需要购买每本书并放在书架上。同样的想法在这里:分配数组给你一个空的容器,然后你需要创建每个对象并把它放到容器中。

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

+0

用于比喻。 – 2013-03-15 04:42:50

+0

但是,在创建数组时,数组中的所有对象都已定义。一个数组不能有不同的数据类型。那么为什么我们应该为每个对象初始化它。声明数组本身时,它不是很好定义? – 2013-03-15 06:08:19

+0

不,定义的是一堆用于数组引用的插槽。您需要为这些插槽分配值。 – yshavit 2013-03-15 14:04:15

相关问题