2011-06-21 2 views
2

例:OnlyShowIfValueIsNonZeroのコードでカスタム属性は、それが接続されているプロパティの値を照会できますか?

[OnlyShowIfValueIsNonZero] 
public int Foo { get; set; } 

、私はFooの値を照会できるようにする必要があります。これは可能ですか?はいの場合、どうですか?

+1

この属性を使用して、クラス型とインスタンスへのアクセス権を持っているおそらくあなたのコードのために非常に人気のAOPフレームワークです。そうであれば、インスタンスからプロパティ値を取得する問題と、何回も返答された「Type」となります。 –

答えて

3

アトリビュートはアトリビュートに割り当てられているメンバーを認識せず、アトリビュートに対してはリフレクションでアクセスする場合にのみインスタンスが作成されます。アトリビュートにコードと直接対話させることはできません。アトリビュートを使用してコンパイル時にコードを挿入しますが、PostSharpのようないくつかのフレームワークがあります。

ただし、リフレクションで指定されたメンバを割り当てることができます。また、そのメンバにその属性にアクセスする必要があるため、そのメンバをパラメータとして受け入れるメソッドを作成できます。

+0

+1はAOPに言及しています – MattDavey

0

おそらく、このようなものです。 例えば、Tは、私はあなたがここに側面指向プログラミングの世界に入るために始めていると思う

foreach (PropertyInfo propertyInfo in (typeof(T)).GetProperties()){ 
    foreach (object attribute in propertyInfo.GetCustomAttributes(true)) 
    { 
     if (attribute is OnlyShowIfValueIsNonZero) 
     { 
      ...... 
     } 
    } 
} 
1

...あなたのクラスです。多くのAOPフレームワークは、独自のカスタム・アスペクトを定義するための拡張性の点を提供します。これが私の思うものです。

PostSharpは、.NET

関連する問題