C#中的模糊函数/构造函数调用

Ahm*_*aid 7 c# ambiguous-call

以下代码导致编译器错误,因为它是不明确的调用,但问题是如果我们使用object而不是ArrayList没有错误发生,string版本工作正常; 你对此有解释吗?

class A
{
    public A(string x)
    {
        Console.WriteLine("string");
    }
    public A(ArrayList x)
    {
        Console.WriteLine("ArrayList");
    }

}
    static void Main(string[] args)
        {
            A o = new A(null);
        }
Run Code Online (Sandbox Code Playgroud)

Dan*_*Tao 16

如果更改需要一个构造函数的代码工作正常的原因ArrayList采取的object是C#编译器将挑选最具体类型适用.在string/ 的情况下object,string实际上派生object并因此"更具体"并且将由编译器推断.与string对比ArrayList,它是苹果和橘子:要么可以为空,但两者都不比另一个更具"特异性".

  • +1打败了我的解释.你的答案是回答实际问题的唯一答案. (4认同)