C# 如何自动更新类的变量成员?
我在C#中定义了一个类,它有一个变量成员(例如x1)。如何将x链接到类外的变量(例如x2),以便x2在任何时候更改变量x1时自动更新C# 如何自动更新类的变量成员?,c#,C#,我在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
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所说,由于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的对象的引用,这样就可以同时更新它们呢?谢谢,Matias。类点有一个函数成员length(),我希望在(x2.value=50)时也调用该函数