为什么以下两个代码示例会产生不同的输出?
情况1
enum EnumType
{
First,
Second,
Third
}
class ClassB
{
public string Func(int index)
{
return "Func(int)";
}
public string Func(EnumType type)
{
return "Func(EnumType)";
}
}
class Program
{
static void Main(string[] args)
{
ClassB b = new ClassB();
Console.WriteLine(b.Func(0));
Console.WriteLine(b.Func(EnumType.First));
Console.ReadLine();
}
}
输出:
Func(int)
Func(EnumType)
案例2
enum EnumType
{
First,
Second,
Third
}
class ClassA
{
public string Func(int index)
{
return "Func(int)";
}
}
class ClassB : ClassA
{
public string Func(EnumType enumType)
{
return "Func(EnumType)";
}
}
class Program
{
static void Main(string[] args)
{
ClassB b = new ClassB();
Console.WriteLine(b.Func(0));
Console.WriteLine(b.Func(EnumType.First));
Console.ReadLine();
}
}
输出:
Func(EnumType)
Func(EnumType)
我很困惑。这是否意味着 Func(EnumType) 隐藏了在基中声明的 Func(int) ?如果是这种情况,那么为什么在第二种情况下将文字 0隐式转换为 EnumType 而没有警告?
编辑:
当我尝试时,还有更有趣的行为
Console.WriteLine(b.Func(0));
Console.WriteLine(b.Func(1));
Console.WriteLine(b.Func(EnumType.First));
你猜输出应该是什么样子?
这里是:
Func(EnumType)
Func(int)
Func(EnumType)
任何想法为什么 0 和 1 被区别对待?
编辑2:
事实证明,字面量 0 在 C# 中确实具有特殊含义。