gpt4 book ai didi

c# - 如何覆盖 C# 中的枚举?

转载 作者:太空狗 更新时间:2023-10-29 22:28:05 25 4
gpt4 key购买 nike

这是我的代码:

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
}
}

ShowEnum 始终显示:

Kirk, Spock, Sulu, Scott

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

最佳答案

您的第二个枚举隐藏第一个枚举,就像在 NewGeneration 中声明一个新字段一样。嵌套类型不是多态的——ShowEnum 中的代码总是引用StarTrek.Characters;代码是在编译时针对该类型构建的。

目前还不清楚您要做什么,但您绝对不能按照您尝试的方式去做。如果您想要多态行为,您必须使用方法、属性或事件,然后必须将它们声明为虚拟的,以便在派生类中被覆盖。

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

关于c# - 如何覆盖 C# 中的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7807951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com