2016-07-25 4 views
0

私の質問はプロパティの継承された属性のチェックを扱います。 this Questionに記載Attribute.IsDefinedとMemberInfo.IsDefined - 継承されたパラメータの相違

等の方法は、(1)及び(2)MemberInfo.IsDefined(Type, Boolean)は基本的に同じであるAttribute.IsDefined(MemberInfo, Type, Boolean)。どちらも属性が使用されているかどうかを確認しています。しかし、私はプロパティを確認したい場合は継承パラメータに重大な違いがある:

(1):

trueの場合、また、カスタム属性のための要素の先祖を検索するように指定します。

(2):

属性を見つけるために、このメンバーの継承チェーンを検索する場合はtrue;それ以外の場合はfalseです。 このパラメータはプロパティとイベントでは無視されます。;備考を参照してください。

(発言のみ(1)の使用をお勧めします)

It's財産の継承された属性を取得するために(1)を使用するには、問題ありません。しかし、私の質問はなぜです:なぜこの機能はこのように実装されていますか?理由、使用法、または利益は何ですか?私の指摘するところでは、パラメータを無視し、実際にはクリーンな解決策ではない方法があります。

私は何か見落としましたか?

答えて

2

私の推測(これははもうではありません) - 理由は下位互換です。

PropertyInfo.IsDefinedおよびEventInfo.IsDefinedは、inheritパラメータが.NET 1.0で導入されたため無視されました。 Attributeの静的メソッドは.NET 2.0で導入され、プロパティとイベントの継承をサポートするように修正されました。その動作を変更する場合は、inheritをtrueに設定した古いコードで予期しない属性が発生する可能性があります。

BCLの多くの不一致の1つだけ... :)

関連する問題