在示例中,我期望得到 Third 作为输出,因为类 Third 具有与 Print 调用完全匹配的签名,但输出是 Second 。为什么会这样?

class First
{
    public virtual void Print(string x)
    {
        Console.WriteLine("First");
    }
}

class Second : First
{
    public void Print(object x)
    {
        Console.WriteLine("Second");
    }
}

class Third : Second
{
    public override void Print(string x)
    {
        Console.WriteLine("Third");
    }
}

class Program
{
    static void Main(string[] args)
    {
        string sss = "lalala";
        Third t = new Third();
        t.Print(sss);

        Console.ReadLine();
    }
}

最佳答案

here :
因此,Third 中的重写方法不适用,Second.Print(object) 隐藏基类实现并成为单一候选者。

关于带有分层参数的 C# 重载解析,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6682760/

10-11 23:43