我想知道C#中的屬性是如何工作的。我知道如何聲明一個屬性或如何創建一個屬性。我想知道如何在特定屬性上生成特定行爲。我應該使用反射嗎?C#中使用反射屬性?
2
A
回答
2
除非您使用AOP框架(例如PostSharp),否則直接影響您的代碼的屬性很少,而且它們只是一些內置屬性。您無法將行爲添加到自定義屬性。同樣的:是的,你必須使用反射來測試你的自定義屬性的存在和/或實現屬性(只是檢查存在比實現它們更便宜)。
如果您正在做這件事,您可能需要考慮緩存通過屬性獲取的信息,這樣您就不需要每次需要元數據時都使用反射。
0
是的,您使用反射來檢查類型或成員是否具有自定義屬性。 這是一個示例,它獲取給定類型的MyCustomAttribute實例。它會返回第一個MyCustomAttribute聲明或null(如果找不到):
private static MyCustomAttribute LookupMyAttribute(Type type)
{
object[] customAttributes = type.GetCustomAttributes(typeof(MyCustomAttribute), true);
if ((customAttributes == null) || (customAttributes.Length <= 0))
return null;
return customAttributes[0] as MyCustomAttribute ;
}
1
是的。假設你有一個對象o並且你想檢查你的屬性的存在。所有你需要做的是:
Type t = o.GetType();
object[] attributes = t.GetCustomAttributes(typeof(MyCustomAttribute));
if (attributes.Length>0){
MyCustomAttribute a = attributes[0] as MyCustomAttribute;
//use your attribute properties to customize your logic
}
+2
如果你想檢查的屬性* *存在,那麼'屬性.IsDefined'明顯便宜 – 2013-02-25 10:16:25
+0
我同意...如果您需要使用屬性屬性,請使用我的代碼。 – 2013-02-25 10:16:54
相關問題
- 1. 使用屬性反射測試屬性
- 2. C#自定義屬性屬性反射
- 3. C#反射索引屬性
- 4. C#反射檢查屬性
- 5. C# - 反射 - 基本屬性
- 6. c#屬性和MethodBody中的反射
- 7. 使用反射來調用屬性
- 8. WPF分配控件在c sharp中使用反射的屬性
- 9. 在C#中使用反射和泛型屬性
- 10. 在c中使用反射設置複雜屬性值
- 11. 閱讀在C#中使用反射所有梅索德屬性
- 12. Javascript屬性反射
- 13. 使用反射獲取屬性的值
- 14. 使用反射設置對象屬性
- 15. 使用反射選擇一些屬性
- 16. 使用反射設置屬性值
- 17. 使用反射來解決Linqed屬性
- 18. 使用反射創建MustOverride屬性?
- 19. 使用反射獲取屬性
- 20. C#反射比。方法屬性
- 21. C#通過反射檢索屬性
- 22. c#反射改變屬性的方法
- 23. 嵌套屬性的C#反射
- 24. C# - 遞歸/反射屬性值
- 25. c#嵌套結構屬性的反射
- 26. C#泛型反射屬性類型
- 27. C#反射:靜態屬性空指針
- 28. C#使用具有通用屬性的反射
- 29. 如果屬性類C#使用反射,如何獲取屬性值?
- 30. 在C#中使用反射
是................... – 2013-02-25 10:12:44