接口,继承到方法中List<IA>的调用
public class InterfaceTest
{
void Test()
{
var lstA1 = new List<A1>();
var lstA2 = new List<A2>();
TestMethod(lstA1, lstA2);//此时是不能编译的。错误:与xxxx最匹配的重载方法具有一些无效参数
}
void TestMethod(List<IA1> a1, List<IA2> a2)
{ }
}
public class A1 : IA1 { }
public class A2 : IA2 { }
public interface IA1 { }
public interface IA2 { }
把方法修改成泛型的方法,然后利用where来约束输入的类型必须继承IA1和IA2的接口。编译通过。
只需要修改方法的代码,其他代码无需修改。
void TestMethod<T1, T2>(List<T1> a1, List<T2> a2)
where T1 : IA1
where T2 : IA2
{ }
见识到泛型的强大了。List<class>可能由于包了一层,导致不能编译通过,不知道这是不是在协变和抗变的范畴,不继续测试了。赶紧敲代码去了。
留文备用。icy.