为什么这不会触发“模棱两可的引用错误”?

12
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));
}

如果我运行这个程序,输出会是"list"。为什么编译器没有触发一个模糊引用错误?

http://dotnetpad.net/ViewPaste/s6VZDImprk2_CqulFcDJ1A


你在谈论哪个版本的C#? - Sanjeevakumar Hiremath
1个回答

15

由于在B中只重载了一个字符串类型的方法,而没有定义重载IList<string>类型的方法,因此前者的优先级低于后者。

因此,第二个方法会被调用,不存在歧义。

详细解释可以参考http://csharpindepth.com/Articles/General/Overloading.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接