为什么Attributes.IsDefined()缺less重载?
受到SO问题的启发。 Attribute类有几个重载的IsDefined()方法。 所涵盖的属性应用于Assembly,Module,MemberInfo,ParameterInfo。 MemberInfo重载包括PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo。
这照顾了大部分的AttributeTargets。 除了一个biggy:Attribute.IsDefined(Type,Type)没有重载,所以你可以检查一个属性是否定义在一个类上。 或者是一个结构,委托或枚举。
不是这是一个真正的问题,Type.GetCustomAttributes()可以解决这个问题。 但所有的BlahInfotypes也有这个。 我想知道缺乏对称性。 我不能指责为什么这将是types的问题。 猜测inheritance问题并不能解释给我。 有ValueType的混合可能是领先的,仍然没有意义。 我不买“他们忘了”,他们从来不这样做。
为什么这个超载缺失?
有一个System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)
和System.Type
派生自System.Reflection.MemberInfo
。
一个程序集,它是任何.NET程序集的顶级容器,都有一个或多个模块。 然后每个模块包含types和types可以有成员,如属性,方法,甚至其他types(嵌套types)。 这就是为什么System.Type
从MemberInfo
派生,以便对象模型允许types作为容器成员的所有东西,包括其他types。