2017-03-26 48 views
2

我在C#中定義了一個具有可變成員(例如x1)的類。如何將x鏈接到類之外的變量(例如x2),以便隨時x2更改變量x1會自動更新?如何自動更新類的變量成員?

class Point 
{ 
    int x1; 
} 

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

爲什麼你不把x2作爲一個屬性包含在一個類中,而是使用一個setter和一個引用來保存x1的對象,所以你一起更新它們? –

回答

2

問題是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

謝謝,Matias。類Point有一個函數成員length(),我希望函數被調用以及(x2.value = 50) –

1

爲馬蒂亞斯說,因爲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 
} 

缺點是,現在兩個對象都耦合在一起。