C#で可変メンバー(たとえばx1)を持つクラスを定義しました。 x2が変数x1を自動的に更新するように、xをクラス外の変数(x2など)にリンクするにはどうすればよいですか?クラスの変数メンバーを自動的に更新するにはどうすればよいですか?
class Point
{
int x1;
}
void Main()
{
int x2;
Point p = new Point();
P.x1=x2;
}
C#で可変メンバー(たとえばx1)を持つクラスを定義しました。 x2が変数x1を自動的に更新するように、xをクラス外の変数(x2など)にリンクするにはどうすればよいですか?クラスの変数メンバーを自動的に更新するにはどうすればよいですか?
class Point
{
int x1;
}
void Main()
{
int x2;
Point p = new Point();
P.x1=x2;
}
問題は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
}
クラスPointに関数メンバlength()がある場合、(x2.value = 50) –
この問題を解決するための別の方法は、あなたの主なメソッドをクラスにあなたの価値をラップし、今
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
}
不利な点は、両方のオブジェクトが結合されることです。
x2をクラスの上にプロパティとして、setterとx1を保持するオブジェクトへの参照でラップしないと、なぜ両方とも更新されますか?おかげで、Matias。 –