反射提供了一種在運行時檢查類型的強大方法。這允許您檢索有關類型的屬性、方法甚至常數的信息。
要使用反射獲取類型的所有常數,您可以使用具有特定綁定標誌的GetFields 方法:
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy
這些標誌確保您檢索在當前類型或其任何基類型中聲明的所有公共靜態欄位。
之後檢索FieldInfo 物件的數組,您可以透過檢查IsLiteral 和IsInitOnly 標誌來過濾它們以僅包含常數:
if(fi.IsLiteral && !fi.IsInitOnly)
IsLiteral 標誌表示欄位的值是在編譯時分配的,而IsInitOnly 標誌表示欄位的值是在編譯時指派的表示該欄位只能在建構函式中初始化。對於常數,這兩個標誌都應該為 true。
使用這種方法,您可以使用反射有效地從任何類型中提取所有常數:
private List<FieldInfo> GetConstants(Type type) { return type.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) .Where(fi => fi.IsLiteral && !fi.IsInitOnly).ToList(); }
此方法傳回FieldInfo 物件的列表,這些物件表示在指定類型中聲明的常量。
以上是如何使用 C# 反射從型別中提取常數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!