簡體   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