[英]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.