1

このコードを検討してください

some v1=new some();
v1.x=10;
some v2=v1;
v1.x=15;
Console.Write(v2.x);//Show 15

v1でxプロパティを変更すると、v2でxの値を変更するのはなぜですか?

4

4 に答える 4

5

オブジェクトインスタンスが1つしかないためです。

変数v1v2は同じオブジェクトへの参照です。オブジェクトの新しいインスタンスを取得しないように割り当てる場合は、参照をコピーするだけv1です。v2

于 2013-03-26T19:53:35.400 に答える
1

v1タイプのオブジェクトへの参照であるためsome。あなたが述べるとき、あなたsome v2 = v1;は実際のオブジェクトのコピーではなく、この参照のコピーを作成します。新しいオブジェクトを作成するには、コンストラクターを実行してクラスを再度インスタンス化する必要がありますsome v2 = new some();

于 2013-03-26T19:54:10.357 に答える
0

v2がv1オブジェクトを参照しているため、その理由は

v1とv2の両方が同じオブジェクト、つまり同じオブジェクト参照を指します。

some v2=v1;

コピーするだけの参照をコピーしない

オブジェクトのコピーを作成するには、次の回答を参照してください:C#でオブジェクトのコピーを作成する

于 2013-03-26T19:52:23.637 に答える
0

正確な動作は、変数の型、より正確には型が値型であるか参照型であるかによって異なります。

これPointstruct、つまり値型です。

var p1 = new System.Drawing.Point(10, 20);
var p2 = p1; // This creates a copy of p1.
p1.X = 15;
Console.WriteLine(p1.X); // ==> 15
Console.WriteLine(p2.X); // ==> 10

ただし、この宣言は参照型を宣言します(クラスは常に参照型です)。

public class Vector
{
    public Vector(double x, double y)
    {
        X = x;
        Y = y;
    }

    public double X { get; set; }
    public double Y { get; set; }
}

これは起こります:

var v1 = new Vector(10.0, 20.0);
var v2 = v1; // Now the reference v2 points to the same object as v1.
v1.X = 15.0;
Console.WriteLine(v1.X); // ==> 15.0
Console.WriteLine(v2.X); // ==> 15.0

参照型の変数には、によって動的に作成されるオブジェクトへの参照が含まれますnew。一方、newキーワードはaの値のみを定義し、変数にはオブジェクト自体が含まれているため、をstruct作成しません。struct


VisualStudioで値型の表示色を変更することをお勧めします。

メニュー:ツール>オプション ここに画像の説明を入力してください

デリゲート、インターフェイス、および列挙の表示色も変更できます。このように、VSのエディターではそれらが(通常の)クラスではないことがすぐにわかります。

于 2013-03-26T20:07:46.173 に答える