有下一个代码:
class Base
{
public virtual void Sum(int a) { Console.WriteLine("Base A: {0}", a); }
}
class Exp : Base
{
public override void Sum(int a) { Console.WriteLine("Exp A: {0}", a); }
public void Sum(double a) { Console.WriteLine("Exp D: {0}", a); }
}
static void Main(string[] args)
{
int a = 100;
Exp b = new Exp();
b.Sum(a);
((Base)b).Sum(a);
Console.ReadKey();
}
它将打印出:
Exp D:100
Exp A:100
问题是为什么第一行显示“ Exp D”? 在C#语言规范中,有一章“ 1.50.3.1适用的函数成员”,据此,Sum(int)是调用b.Sum(a)的适用的函数成员。 / p>
根据章节' 1.50.3.2更好的函数成员',Sum(int)比Sum(double)是更好的函数成员(从int到double的隐式转换) ,而在第一种情况下完全没有转换)。 发生了什么事?