[英]Base Class Enum Value from Derived Class?
是否可以從派生類中獲取基類的枚舉值,而無需使用反射?
下面的代碼使用Reflection,從對象實例獲取基類字段值似乎有點過分。
using System;
namespace Seans
{
public class BaseClass
{
public enum eEnum{a, b, c}
}
class Program
{
static void Main(string[] args)
{
DerivedClassA newObject = new DerivedClassA();
TraverseTheObjectHierachyForTheTaskListEnum(newObject.GetType());
Console.ReadLine();
}
public static Type GetTaskListType(Type type)
{
// Handle the cases where our enums are defined in the base class
return TraverseTheObjectHierachyForTheTaskListEnum(type);
}
private static Type TraverseTheObjectHierachyForTheTaskListEnum(Type type)
{
foreach (Type nestedType in type.GetNestedTypes())
{
if (nestedType.IsEnum)
{
// Enum Name, now you can get the enum values...
Console.WriteLine(nestedType.FullName);
return nestedType;
}
}
if (type.BaseType != null)
{
return TraverseTheObjectHierachyForTheTaskListEnum(type.BaseType);
}
return null;
}
}
}
所以,由於BaseClass中沒有字段,只是枚舉類型定義,因此不太清楚你正在尋找什么。 這些都是:
Enum.GetValues(typeof(BaseClass.eEnum));
要么
Enum.GetValues(typeof(DerivedClassA.eEnum));
將為您提供枚舉的值。 如果在編譯時不知道枚舉的名稱,那么反射是唯一的方法。
您的上述代碼不會獲取字段值,而是獲取所有嵌套類型的類型對象。
方法TraverseTheObjectHierachyForTheTaskListEnum
的遞歸是必要的,因為類型type.GetNestedTypes()
只返回所提供的實際類型(即DerivedClassA)的類型,但不返回嵌套在其基類中的任何類型。
您可以通過調試器單步執行代碼來輕松驗證此行為。 您將不會獲得DerivedClassA
任何嵌套類型,但對於基類類型type.GetNestedTypes()
將返回枚舉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.