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