奇怪的更好的功能成员行为

时间:2018-12-11 16:11:35

标签: c# .net

有下一个代码:

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的隐式转换) ,而在第一种情况下完全没有转换)。 发生了什么事?

0 个答案:

没有答案