2012-03-14 5 views
2

私はこのコードを持っていると仮定:C#のアレイ

struct Normal 
{ 
    public float x; 
    public float y; 
} 

class NormalContainer 
{ 
    public Normal[] Normals 
    { 
     get; set; 
    } 
} 

class Main 
{ 
    void Run(NormalContainer container) 
    { 
     Normal[] normals = container.Normals // 1 - see below 
     normals[5].x = 4;     // 3 - see below 
     container.Normals = normals;   // 2 - see below 
    } 
} 

ないが、(1)配列のコピーを作成するか、またはこれはアレイによって占有されるメモリを参照しているのですか? (2)はどうですか?

ありがとう

+0

これは、デバッガを起動してそれらのステートメントをトレースするのに最適な時間です。コードが渡されたオブジェクトの内部にあるものと何らかの違いがあるかどうかを確認できます。 – JTeagle

答えて

1

(1)コピー配列の参照

(2)同じ

配列変数にかかわらず、それらの基礎となる要素タイプの、参照型であるので、あなたが別の配列変数を割り当てるたびに、あなただけコピーします参照。

+0

だから(3)で何が起こるのですか?配列が参照の場合、法線[5] .x = 4を実行すると、container.Normalsの値がline(2)の前に変更されますか?もしそうなら、line(2)は不必要ですか? – sirival

+1

Nevermind私は座って、私の例を書いた...これはまさに何が起こる..ありがとう! – sirival

2

C#の配列は参照型です。割り当てのような項目は、参照と値のコピーを作成します。 C#では、それは「メモリへの参照」対「オブジェクトへの参照」と言うことがより適切だ

3
:(1)あなたは container

ノートに格納された配列へのローカル参照して終わるの終わりに

Arrayは参照型ですので、参照を配列インスタンスにコピーするだけです。