0

我在“public ClassA”中有一个 C# 属性,如下所示://假设存在私有字段

public String Test
{
    get
    {
        return _test;
    }
    set
    {
        _test= value;
        OnPropertyChanged("Test");
    }
}

如果我从 ClassA 成员函数更新 Test 的值,我会收到有关其属性更改的通知。

但是,如果我将此属性作为参数传递给属于某个其他类的函数,并从那里更改其值,我不会收到通知。

是因为它是按价值传递的吗?我想我会尝试用 ref 传递它,但这不会编译。

如何将此属性传递给任何函数并仍然收到更改通知?

4

3 回答 3

3

如果将属性的值作为参数传递给另一个方法,然后更改其值,则属性的值保持不变。

在接收端传递父对象并操作其属性怎么样?毕竟 setter 属于那个对象,而不是它持有的值。

于 2012-11-18T21:38:08.990 回答
3

您提出的建议将导致令人难以置信的臭代码。实现此目的的一种简单方法是调用该函数,并将其返回值分配给您的属性:

this.Test = SomeObject.CallSomeFunction();

这将实现使您的代码保持简洁的目标,并将触发属性更改通知。您可以调用目标函数并将调用者的引用传递给它(SomeObject.CallSomeFunction(this);),但在 99% 的情况下,您不应该简单地这样做,以便目标函数可以操纵调用者的属性。

于 2012-11-18T21:38:37.733 回答
1

是因为它是按价值传递的吗?

是的

我想我会尝试用 ref 传递它,但这不会编译

因为只能通过引用传递字段和变量;属性实际上更像方法(实际上是方法对:get/set)。一种解决方法是执行以下操作:

string test = Test;
SomeMethod(ref test);
Test = test;
于 2012-11-18T21:49:05.680 回答