使用ref将C#属性传递给函数

时间:2012-11-18 21:33:07

标签: c# .net c#-4.0

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

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

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

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

是因为它被价值传递了吗? 我以为我会尝试用ref传递这个但是不能编译。

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

3 个答案:

答案 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;