接口、继承和泛型方法的使用

接口,继承到方法中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.

原文地址:https://www.cnblogs.com/icyJ/p/where.html