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

使用ref将C#属性传递给函数,c#,.net,c#-4.0,C#,.net,C# 4.0,我在“public ClassA”中有一个C#属性,如下所示://假设存在私有字段 public String Test { get { return _test; } set { _test= value; OnPropertyChanged("Test"); } } 如果我从ClassA成员函数更新Test的值,我会收到其属性更改的通知 但是,如果我将这个属性作为参数传递给属于其他类的函数,并从

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

public String Test
{
    get
    {
        return _test;
    }
    set
    {
        _test= value;
        OnPropertyChanged("Test");
    }
}
如果我从ClassA成员函数更新Test的值,我会收到其属性更改的通知

但是,如果我将这个属性作为参数传递给属于其他类的函数,并从中更改它的值,我不会得到通知

是因为它是按值传递的吗? 我想我会尝试用ref传递它,但它无法编译


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

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


传递父对象并在接收端处理其属性如何?毕竟setter属于该对象,而不是它所持有的值。

您的建议将导致令人难以置信的代码臭味。实现这一点的一个简单方法是调用函数,并将其返回值指定给您的属性:

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

是因为它是按值传递的吗

我想我会尝试用ref传递这个,但它无法编译

因为只有字段和变量可以通过引用传递;属性实际上更像方法(实际上是方法对:get/set)。解决方法是这样做:

string test = Test;
SomeMethod(ref test);
Test = test;

但我希望它改变,并让它的setter被调用。是否有其他选择,因为这将需要对我的代码进行一些重大更改。是否有通过引用传递属性的解决方法?