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?
你的第二个枚举是影响第一个,就像在will中声明一个新的字段NewGeneration
一样.嵌套类型不是多态-代码ShowEnum
将始终参考StarTrek.Characters
; 代码是在编译时针对该类型构建的.
你要做的事情并不是很清楚,但是你绝对不能以你正在尝试的方式去做.如果您需要多态行为,则必须使用方法,属性或事件,然后必须将其声明为虚拟,以便在派生类中重写.
(值得注意的是,重载和覆盖是不同的,顺便说一下 - 你的问题是指超载,但我认为你的意思是重写.)
归档时间: |
|
查看次数: |
6810 次 |
最近记录: |