为什么Attributes.IsDefined()缺少重载?


165

受SO问题启发。Attribute类具有IsDefined()方法的多个重载。涵盖了应用于程序集,模块,成员信息,参数信息的属性。MemberInfo重载涵盖PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo。

这将处理大多数AttributeTargets。除了一个缺点:Attribute.IsDefined(Type,Type)没有重载,因此您可以检查是否在类上定义了属性。或针对此问题的结构,委托或枚举。

并不是说这是一个真正的问题,Type.GetCustomAttributes()可以解决此问题。但是所有的BlahInfo类型也都具有此功能。我不知道缺乏对称性。我无法确定为什么这会对Type造成问题。猜测继承问题并不能向我解释。混合使用ValueType可能会领先,但这仍然没有意义。我不买“他们忘了”,他们从来不买。

为什么这种超载丢失了?

Answers:


170

有一个System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)System.Type衍生自System.Reflection.MemberInfo

程序集是任何.NET程序集的顶级容器,具有一个或多个模块。每个模块都包含类型,类型可以具有诸如属性,方法甚至其他类型(嵌套类型)的成员。这就是为什么System.Type要从中派生,MemberInfo以便对象模型允许类型将所有成员(包括其他类型)作为容器工作。


过载ICustomAttributeProvider也很有意义。
安德森先生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.