如何自动更新类的变量成员?

时间:2017-03-26 04:23:23

标签: c#

我在C#中定义了一个具有变量成员的类(例如x1)。如何将x链接到类之外的变量(例如x2),以便x2随时更改变量x1会自动更新?

class Point
{
    int x1;
}

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

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

正如Matias所说,由于int值不是引用类型,因此无法同时更新

解决问题的另一种方法是将值包装到类中并使用 setter property

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
}

缺点是现在两个对象都已耦合。