3

私は mvp を使用して、C# でいくつかの winforms を接続することに取り組んでいます。UI 開発は私の強力なスイートではありません。変更通知を発生させるために文字列に頼ることなく、INotifyPropertyChanged を実装するためのリファクタリング証明の方法を探していました。

msdn の例http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspxと、私が見た他のほとんどは、何よりも、プロパティをリファクタリングする場合は、文字列を変更する必要があります。

式と関数を使用してスタックオーバーフローで見た他のすべてのオプションは、残念ながら私がサポートしているレガシーソリューションでは利用できない機能であるため、式ツリーを使用してプロパティ名を取得する現在のソリューションを複製する方法があるかどうか疑問に思っていました。

私が見てきたソリューションの例。

public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>>      expression) 
{
 MemberExpression body = (MemberExpression)expression.Body; return body.Member.Name; 
}

乾杯

4

1 に答える 1

6

.NET 3.0の場合、リファクタリングに耐える実装方法を実装するための最善の策 INotifyPropertyChangedは、何らかの形式のコード生成を使用することです。たとえば、PostSharp(AOPツール)は、コンパイル後のステップで生成されたアセンブリを変更するためにILウィービングを使用します。INotifyPropertyChanged ここに関連するサンプルがあります。

ちなみに、最先端の(C#5)実装方法でINotifyPropertyChanged は、特別なツールはまったく必要ありません。[CallerMemberName]属性があります。

于 2012-06-10T17:46:50.613 に答える