为什么不触发“模糊参考错误”?

时间:2011-03-09 01:37:00

标签: 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));
}

http://dotnetpad.net/ViewPaste/s6VZDImprk2_CqulFcDJ1A

如果我运行这个程序,我会将“list”发送到输出。为什么这不会在编译器中触发模糊的引用错误?

1 个答案:

答案 0 :(得分:15)

由于B中没有定义带有字符串的重载(仅覆盖),因此它的优先级低于采用IList<string>的优先级。

因此,第二次超载获胜并且没有歧义。

http://csharpindepth.com/Articles/General/Overloading.aspx

详细说明了这一点