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

配列のすべての位置で各オブジェクトをインスタンス化する必要がありますか?

配列要素を2回インスタンス化することはありません。StageSplitDate 最初の行では、すべての要素がnullに設定された配列をインスタンス化しました。デフォルトでは、(参照型の)各配列要素は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 参照の配列です。s自体はStageObjectまだ存在していません。基本的に、配列内の各エントリは、単に「ポイント」または「参照」し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]null参照StageObjectを含む参照の新しい配列を作成します。Stages.Rows.Count各要素がを指すようにしStageObjectます。StageObjectそのためには、いくつかのインスタンスを作成する必要があります。

于 2013-03-15T04:35:52.003 に答える