如何在C#中覆盖枚举?

ace*_*33s 5 c# enums overloading

这是我的代码:

void Main()
{
    StarTrek baseClass = new StarTrek();
    NewGeneration childClass = new NewGeneration();

    baseClass.ShowEnum();
    childClass.ShowEnum();
}

public class StarTrek
{
    internal enum Characters
    {
        Kirk, Spock, Sulu, Scott
    }

    public void ShowEnum()
    {
        Type reflectedEnum = typeof(Characters);
        IEnumerable<string> members = reflectedEnum.GetFields()
                                            .ToList()
                                            .Where(item => item.IsSpecialName == false)
                                            .Select(item => item.Name);
        string.Join(", ", members).Dump();
    }
}

public class NewGeneration : StarTrek
{
    internal new enum Characters
    {
        Picard, Riker, Worf, Geordi
    }       
}
Run Code Online (Sandbox Code Playgroud)

ShowEnum始终显示:

柯克,斯波克,苏禄,斯科特

即使它是在NewGeneration类中调用的.我错过/误解了什么吗?ShowEnum有没有办法使用NewGeneration.Characters而不是StarTrek.Characters?

Jon*_*eet 6

你的第二个枚举是影响第一个,就像在will中声明一个新的字段NewGeneration一样.嵌套类型不是多态-代码ShowEnum始终参考StarTrek.Characters; 代码是在编译时针对该类型构建的.

你要做的事情并不是很清楚,但是你绝对不能以你正在尝试的方式去做.如果您需要多态行为,必须使用方法,属性或事件,然后必须将其声明为虚拟,以便在派生类中重写.

(值得注意的是,重载和覆盖是不同的,顺便说一下 - 你的问题是指超载,但我认为你的意思是重写.)