我在C#中定義了一個具有可變成員(例如x1)的類。如何將x鏈接到類之外的變量(例如x2),以便隨時x2更改變量x1會自動更新?如何自動更新類的變量成員?
class Point
{
int x1;
}
void Main()
{
int x2;
Point p = new Point();
P.x1=x2;
}
我在C#中定義了一個具有可變成員(例如x1)的類。如何將x鏈接到類之外的變量(例如x2),以便隨時x2更改變量x1會自動更新?如何自動更新類的變量成員?
class Point
{
int x1;
}
void Main()
{
int x2;
Point p = new Point();
P.x1=x2;
}
問題是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
}
謝謝,Matias。類Point有一個函數成員length(),我希望函數被調用以及(x2.value = 50) –
爲馬蒂亞斯說,因爲INT值不引用類型,你不能同時更新同時
解決問題的另一種方法是你的價值包裝成一個類,並使用 setter屬性
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的對象,所以你一起更新它們? –