Attributes.IsDefined()にオーバーロードがないのはなぜですか?


165

SOの質問に触発されました。Attributeクラスには、IsDefined()メソッド用のいくつかのオーバーロードがあります。対象となるのは、Assembly、Module、MemberInfo、ParameterInfoに適用される属性です。MemberInfoオーバーロードは、PropertyInfo、FieldInfo、EventInfo、MethodInfo、ConstructorInfoをカバーします。

これで、ほとんどのAttributeTargetsが処理されます。1つの大きな違いを除いて:Attribute.IsDefined(Type、Type)のオーバーロードがないため、属性がクラスで定義されているかどうかを確認できます。または、その問題の構造体、委任、または列挙型。

これが実際の問題ではないため、Type.GetCustomAttributes()で修正できます。しかし、すべてのBlahInfoタイプにもこれがあります。対称性の欠如に疑問を感じます。なぜこれがTypeの問題になるのか、はっきりとは言えません。継承の問題を推測しても、それは説明できません。ValueTypeを組み合わせることはリードになるかもしれませんが、それでも意味がありません。私は「彼らが忘れた」を買わない、彼らは決して買わない。

このオーバーロードが欠落しているのはなぜですか?

回答:


170

があり、System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)からSystem.Type派生しSystem.Reflection.MemberInfoます。

.NETアセンブリの最上位コンテナであるアセンブリには、1つ以上のモジュールがあります。各モジュールには型が含まれ、型にはプロパティ、メソッド、その他の型(ネストされた型)などのメンバーを含めることができます。だからこそだSystem.Typeから派生したMemberInfoので、オブジェクトモデルは、容器としての仕事へのタイプその他のタイプを含む、すべてのもののメンバー、を可能にすること。


のオーバーロードは、ICustomAttributeProviderあまりにも理にかなっています。
アンダーソン氏2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.