我在“public ClassA”中有一个C#属性,如下所示://假设存在私有字段
public String Test
{
get
{
return _test;
}
set
{
_test= value;
OnPropertyChanged("Test");
}
}
如果我从ClassA成员函数更新Test的值,我会收到有关其属性更改的通知。
但是,如果我将此属性传递给属于某个其他类的函数,作为参数,并从那里更改其值,则不会收到通知。
是因为它被价值传递了吗? 我以为我会尝试用ref传递这个但是不能编译。
如何将此属性传递给任何函数并仍然收到有关更改的通知?
答案 0 :(得分:3)
如果将属性的值作为参数传递给另一个方法,然后更改其值,则属性的值保持不变。
如何在接收端传递父对象并操纵其属性?毕竟所有的setter都属于那个对象,而不是它所拥有的值。
答案 1 :(得分:3)
您提出的建议将导致令人难以置信的臭代码。实现此目的的一种简单方法是调用函数,并将其返回值赋给您的属性:
this.Test = SomeObject.CallSomeFunction();
这将实现保持代码简洁的目标,并且它将触发属性更改通知。您可以调用目标函数并将调用者的引用传递给它(SomeObject.CallSomeFunction(this);
),但在99%的情况下,您不应该这样做,因此目标函数可以操纵调用者的属性。 / p>
答案 2 :(得分:1)
是因为它被价值传递了吗?
是
我以为我会尝试用ref传递这个但是不能编译
因为只能通过引用传递字段和变量;属性实际上更像是方法(实际上是方法对:get / set)。解决方法是做类似的事情:
string test = Test;
SomeMethod(ref test);
Test = test;