协变是,接口泛型参数仅用于输出的地方、并且是父接口为object,子类对象为string等类型。
interface IjiekouB<out T>//T仅用作返回值,是输出结果
{
T GetData();
}
static void Main(string[] args)
{
A<string> a1 = new A<string>();
a1.storedData = "abc";
IjiekouB<object> jb1 = a1;//父类接口object,子类对象string,string->object
Console.WriteLine(jb1.GetData());
}
逆变是,,接口泛型参数仅用于输入的地方。并且父接口为string等类型,子类对象为object
interface IjiekouA<in T>//T仅用作参数,是输入
{
void setData(T data);
}
static void Main(string[] args)
{
A<object> a1 = new A<object>();
IjiekouA<string > ja1 = a1;//因为是做输入。string->object
ja1.setData("abc");
Console.WriteLine(a1.storedData);
}