6

私はC#配列を読んでいるので、最初は配列に関する質問です。

配列を宣言することは実際にはどういう意味ですか? 配列型の変数を宣言していることは知っています。次の場合、実際に何が起こっているのでしょうか?

int[] values;

宣言されるまでにメモリに入っていますか?そうでない場合、それはどこにありますか?配列は実際にここで作成されますか?

次に、配列をインスタンス化し、次のような値で初期化します。

int[] values = new int[] { 1, 2, 3 };

これで実際に配列が作成されますか? 配列は宣言時に作成されると読んだことがありますが、配列はインスタンス化時に作成されると言う人もいます。私は用語を正しく理解しようとしています。

同じことが整数変数にも当てはまります。私が持っている場合:

int value;

int value = 1;

int はいつ作成されますか? いつメモリに追加されますか?

ばかげた質問で申し訳ありません。概念は理解していますが、配列の舞台裏の技術を知りたいです。

4

4 に答える 4

6

配列を宣言することは実際にはどういう意味ですか?

実際には配列を宣言していません。配列参照を宣言しています。.NET では、参照型と値型の違いが重要です。配列参照変数を持つだけでは十分ではなく、配列オブジェクトを作成するには追加の手順が必要です。新しいキーワードが必要です。これは、参照型オブジェクトが格納される場所であるガベージ コレクション ヒープに、配列オブジェクト用のストレージを物理的に割り当てます。

同じことが整数変数にも当てはまります

いいえ、大きな違いです。それが値型です。それがクラスのフィールドではない場合、あなたの質問からは明らかではありませんが、それはメソッドのローカル変数です。メソッドが実行を開始すると作成され、メソッドが戻ると存在しなくなります。非常に高度に最適化されており、値型が C# に存在する主な理由です。メソッドがあまりにも多くのローカル変数を使用する場合、物理ストレージの場所は通常、CPU レジスタまたはスタック フレームのスロットです。

実際にクラスのメンバーである場合は、クラス オブジェクトが作成されるときに作成されます。配列と同じように、GC ヒープ上でnewキーワードを使用します。

于 2013-07-11T14:09:19.710 に答える