2017-03-26 11 views
2

C#で可変メンバー(たとえばx1)を持つクラスを定義しました。 x2が変数x1を自動的に更新するように、xをクラス外の変数(x2など)にリンクするにはどうすればよいですか?クラスの変数メンバーを自動的に更新するにはどうすればよいですか?

class Point 
{ 
    int x1; 
} 

void Main() 
{ 
    int x2; 
    Point p = new Point(); 
    P.x1=x2; 
} 
+1

x2をクラスの上にプロパティとして、setterとx1を保持するオブジェクトへの参照でラップしないと、なぜ両方とも更新されますか?おかげで、Matias。 –

答えて

2

問題はintが故に、それは常に値によってコピーされる、参照型ではないということです。自明あなたが求めるものを達成するために

、単に参照型の値をラップ:マティアスはint型の値が型を参照されていないので、あなたは両方を同時に

を更新することはできません、言ったよう

public class X 
{ 
    public int value; 
} 

public class Point 
{ 
    public X x1; 
} 

void Main() 
{ 
    X x2 = new X(); 
    Point p = new Point(); 
    p.x1 = x2; 

    x2.value = 50; 
    Console.WriteLine(p.x1.value); //Prints out 50 
} 
+0

クラスPointに関数メンバlength()がある場合、(x2.value = 50) –

1

この問題を解決するための別の方法は、あなたの主なメソッドをクラスにあなたの価値をラップし、今

class Point 
{ 
    Point(Wrapped wrapped) { 
     _wrapped = wrapped; 
    } 
    private Wrapped _wrapped; 
    private int _x1; 
    public int x1 { 
     get { return _x1; } 
     set { 
     _x1 = value; 
     _wrapped.x2 = value; 
     } 
    } 
} 

class Wrapped { 
    int x2; 
} 

セッタープロパティを使用することです以下のようになります

void Main() 
{ 
    var wrapped = new Wrapped(); 
    Point p = new Point(wrapped); 
    P.x1= 3; 
    Assert.AreEquals(p.x1, wrapped.x2); // true - both are equals to 3 
} 

不利な点は、両方のオブジェクトが結合されることです。

関連する問題