我定义了两个函数
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);
答案 0 :(得分:4)
IList<T>
是一种比ICollection<T>
更具体的类型(因为它实现了ICollection<T>
),因此重载解析更喜欢IList<T>
。
答案 1 :(得分:0)
IList实现了ICollection,但ICollection没有实现IList,因此编译器将调用发送到传入的Type的最小原始匹配(即IList)。