2010-06-11 80 views
159

受到SO問題的啓發。 Attribute類對於IsDefined()方法有幾個重載。所涵蓋的屬性應用於Assembly,Module,MemberInfo,ParameterInfo。 MemberInfo重載包括PropertyInfo,FieldInfo,EventInfo,MethodInfo,ConstructorInfo。爲什麼Attributes.IsDefined()缺少重載?

這照顧了大部分AttributeTargets。除了一個Biggy:Attribute.IsDefined(Type,Type)沒有重載,因此您可以檢查某個屬性是否在類中定義。或者是一個結構,委託或枚舉。

不是說這是一個真正的問題,Type.GetCustomAttributes()可以解決這個問題。但是所有的BlahInfo類型都有。我想知道缺乏對稱性。我不能指責爲什麼這會是類型的問題。猜測繼承問題並不能解釋給我。在組合中使用ValueType可能是一個主角,但仍然沒有意義。我不買「他們忘了」,他們從來不會這樣做。

爲什麼超負荷缺失?

回答

165

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

程序集是任何.NET程序集的頂級容器,都有一個或多個模塊。每個模塊包含的類型和類型都可以包含屬性,方法甚至其他類型(嵌套類型)等成員。這就是爲什麼System.Type派生自MemberInfo,以便對象模型允許類型作爲容器的所有成員,包括其他類型。

+0

ICustomAttributeProvider的重載也會有很大的意義。 – 2016-06-23 16:40:52