2017-02-07 8 views
0

C#では、プロパティに実行時に別のオブジェクトを参照するSetterがあるかどうかを確認できますか?ここPropertyに別のオブジェクトを参照するSetterがあるかどうかを確認できますか?

は、いくつかのコードである:上記のコードで

private PropertyChanged _propertyChanged; 
public string PropertyChangedName 
{ 
    get 
    { 
     return _propertyChanged.Name; 
    } 
    set 
    { 
     _propertyChanged.Name = value; 
    } 
} 

、PropertyChangedNameはのPropertyChangedオブジェクトの一部として参照されます。 PropertyChangedNameを設定すると、_propertyChanged.Nameが設定されます。ここで

はPropertyChangedNameがのPropertyChangedオブジェクトの一部として参照されていないいくつかのコードです:

private string _propertyChangedName; 
public string PropertyChangedName 
{ 
    get 
    { 
     return _propertyChangedName; 
    } 
    set 
    { 
     _propertyChangedName = value; 
    } 
} 

答えて

0

私は、これは、しかし、それはあなたを助けるかもしれない最良の方法であることを確認していない:

// store the current state: 
var valuesbefore = new List<object>(); 
foreach (var r in this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic)) 
    valuesbefore.Add(r.GetValue(this)); 

// change the value the specified property 
PropertyChangedName = PropertyChangedName + "a"; 

//get the new state of the class: 
var valuesnow = new List<object>(); 
foreach (var r in this.GetType().GetFields(System.Reflection.BindingFlags.NonPublic)) 
    valuesnow.Add(r.GetValue(this)); 

// check for any change 
bool equal = valuesbefore.SequenceEqual(valuesnow); 

の場合は、設定者がプライベートフィールドの値を変更するケースを処理していることを意味します。 string、intなど以外の型を扱うときは、特別な注意が必要です。

+0

実行時に投稿したコードを実行することは可能ですか? – user3736648

+0

問題が発生しましたか?論理は簡単です:クラスのコピーを保存し、プロパティを変更し、保存されたコピーと比較し、何が起こったかを見てください。 – Ron

+0

クラスのコピーを保存せずに、実行時に多くのオブジェクトに対してコードを実行する必要があるため、コードを実行することはできません。別の方法がありますか? – user3736648

0

これは本当に難しい質問です。 .NETのSystem.Reflectionライブラリでは、クラスシグネチャ(型、フィールド、メソッドなど)を監視し、呼び出すことができます。彼らの体の中には見えません。

メソッドの内容を検査するオプションについては、this questionの回答をお読みください。 (プロパティは単なるメソッドです - getsetの両方がある場合は2)

関連する問題