传递给具有不同签名的函数的数组

时间:2014-11-30 15:21:15

标签: arrays c#-4.0

我定义了两个函数

    public static void M1(ICollection<Employee> l)
    {
       Console.WriteLine("ICOllection called");
    }
    public  static void M1(IList<Employee> l){
        Console.WriteLine("IList called");
    }

当数组实现ICollection和IList时,为什么调用总是转到第二个函数?如何确定优先顺序?。

Employee[] emp = new[] {new Employee(),new Employee()};
M1(emp);

我知道我可以输入强制转换并调用其他函数

M1((ICollection<Employee>)emp);

2 个答案:

答案 0 :(得分:4)

IList<T>是一种比ICollection<T>更具体的类型(因为它实现了ICollection<T>),因此重载解析更喜欢IList<T>

答案 1 :(得分:0)

IList实现了ICollection,但ICollection没有实现IList,因此编译器将调用发送到传入的Type的最小原始匹配(即IList)。