繁体   English   中英

派生类的基类枚举值?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM