0

次のように「publicClassA」にC#プロパティがあります。//プライベートフィールドが存在すると仮定します

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

ClassAメンバー関数からTestの値を更新すると、プロパティの変更が通知されます。

しかし、このプロパティを他のクラスに属する関数にパラメーターとして渡し、そこから値を変更しても、通知は届きません。

それは価値によって渡されているからですか?これをrefで渡そうと思ったのですが、コンパイルされません。

このプロパティを関数に渡しても、変更の通知を受け取るにはどうすればよいですか?

4

3 に答える 3

3

プロパティの値をパラメータとして別のメソッドに渡してからその値を変更すると、プロパティの値は変更されません。

親オブジェクトを渡し、受信側でそのプロパティを操作するのはどうですか?結局のところ、セッターは、それが保持する値ではなく、そのオブジェクトに属します。

于 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 に答える