如何確定某個屬性是否可以應用於使用反射的類?獲取可應用於類的所有屬性
我使用反射,基本上目前拉動的屬性類型的集合:
GetAssemblies
GetTypes
- 其中基本類型是
Attribute
然後讓建設者以類型得到每個可用的簽名。
我只需要可以應用於類的屬性,但不知道在哪裏可以找到使用反射的用法定義。
如何確定某個屬性是否可以應用於使用反射的類?獲取可應用於類的所有屬性
我使用反射,基本上目前拉動的屬性類型的集合:
GetAssemblies
GetTypes
Attribute
然後讓建設者以類型得到每個可用的簽名。
我只需要可以應用於類的屬性,但不知道在哪裏可以找到使用反射的用法定義。
您需要在Attribute類上獲得AttributeUsageAttribute。
你已經獲得了所有的屬性類型,所以你快到了。每種類型請致電GetCustomAttributes()
。如果屬性類型沒有使用屬性,我相信它可以在任何地方使用。如果它具有使用屬性,請閱讀ValidOn
property以查看它是否包含AttributeTargets.Class
。
var attributes = attributeType.GetCustomAttributes(typeof(AttributeUsageAttribute), true);
if(attributes.Length == 0 || (attributes.Length > 0 && ((AttributeUsageAttribute)attributes[0]).ValidOn & AttributeTargets.Class) != 0))
{
//is class-valid attribute
}
試試這個方法。您需要獲取屬性的屬性。
public bool IsClassAttribute(Type attribute)
{
object[] attributeUsage = attribute.GetCustomAttributes(typeof(AttributeUsageAttribute), true);
if (attributeUsage == null || attributeUsage.Length <= 0) return false;
AttributeUsageAttribute aua = attributeUsage[0] as AttributeUsageAttribute;
return aua != null && (aua.ValidOn & AttributeTargets.Class) != 0;
}
的可能重複[如何獲得通過反射一次調用這兩個字段和屬性?](http://stackoverflow.com/questions/12680341/how-to-get-both-fields-and-properties通過反射的單通電話) – Jeff
這不必與字段和屬性。我試圖獲得屬性的用法..因爲一個屬性只能應用於一個方法,或只應用於一個類,或兩者。 – opdb
點了。我猜想任何屬性都可以應用於任何類,它仍然會編譯。 – Jeff