カスタム属性のInheritedプロパティ

カスタム属性にはInheritedプロパティという属性がある。

  • Inherited

この名前付きパラメータは、派生クラスおよびオーバーライドするメンバが、制御対象とする属性を継承できるかどうかを指定します。

すわ、このプロパティをtrueに設定したカスタム属性であれば、DynamicProxyにより拡張された型は属性をそのまま引き継げるのではないか、と思い試してみたのだが結果は変わらなかった。残念。

  • 追記

残念と思ったつかの間だったが、カスタム属性の取得では以下のメソッドがあったことを思い出した。

public static Attribute GetCustomAttribute (
MemberInfo element,
Type attributeType,
bool inherit
)

最後のパラメタinheritにtrueを指定すると、element の先祖のカスタム属性も検索する、とリファレンスにも書いてある。先祖? 先祖って何?、日本語が訳わからないので実際に試してみた。昨日のエントリのサンプルで書くとこうだ。

HogeAttribute attr = Attribute.GetCustomAttribute(enhancedHoge, typeOf(enhancedHoge), true) as HogeAttribute;

ビンゴ。attrにはProxyによる拡張前の型が、元々持っていたカスタム属性を取得することができた。あとはメソッドやプロパティ毎に設定されたカスタム属性が取得できれば完璧だ。