在示例中,我期望得到 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/