C# 为什么';这不会触发一个;不明确的引用错误“;? 公共A类 { 公共虚拟字符串Go(string str){return str;} } B级:A级 { 公共重写字符串Go(string str){return base.Go(str);} 公共字符串Go(IList列表){return“list”;} } 公共静态void Main(字符串[]args) { var ob=新的B(); 控制台写入线(ob.Go(null)); }

C# 为什么';这不会触发一个;不明确的引用错误“;? 公共A类 { 公共虚拟字符串Go(string str){return str;} } B级:A级 { 公共重写字符串Go(string str){return base.Go(str);} 公共字符串Go(IList列表){return“list”;} } 公共静态void Main(字符串[]args) { var ob=新的B(); 控制台写入线(ob.Go(null)); },c#,C#,如果我运行这个程序,我会得到发送到输出的“列表”。为什么这不会在编译器中触发不明确的引用错误?由于采用字符串的重载未在B中定义(仅被重写),因此它的优先级低于采用IList的重载 因此,第二个重载将获胜,并且没有歧义 这一点在您所谈论的C#的哪个版本中有详细解释? public class A { public virtual string Go(string str) { return str; } } public class B : A { public over


如果我运行这个程序,我会得到发送到输出的“列表”。为什么这不会在编译器中触发不明确的引用错误?

由于采用字符串的重载未在B中定义(仅被重写),因此它的优先级低于采用IList的重载

因此,第二个重载将获胜,并且没有歧义

这一点在

您所谈论的C#的哪个版本中有详细解释?
public class A
{
    public virtual string Go(string str) { return str; }
    }

public class B : A
{
    public override string Go(string str) {return base.Go(str);}
    public string Go(IList<string> list) {return "list";}
}

public static void Main(string[] args)
{
    var ob = new B();
    Console.WriteLine(ob.Go(null));
}