协变接口和逆变接口

协变性

interface IRetrivevWraper

{

    T GetData();

}

只要存在从类型A到类型B的有效转换,或者类型A派生自类型B,就可以将IRetrieveWrappter对象赋给

IRetrieveWrapper引用。

注意:

只有作为方法返回类型指定的类型参数才能使用out限定符。

只有接口和委托类型才能声明为协变量。不能为泛型类使用out修饰符。

逆变性

public interface ICompare

{

    int Compare(T x, T y);

}

in关键字明确告诉C#编译器:程序员要么传递T作为方的参数类型,要么传递T的派生类型。程序员不能将T用作任何方法的返回类型。

难点

协变:IRetrieveWrapper = stringWrapper;//存在string到object的有效转换,所以可以将IRetrieveWrapper对象赋值给IRetrieveWrapper引用。

逆变:IComparer stringComparator = objectComparer;//逆变是作为参数存在的,因为string中存在object中存在的属性和方法,所以ICompare可以赋值给IComparer引用。

你可能感兴趣的:(协变接口和逆变接口)