一、协变
支持协变的泛型参数用out标注,形式是<out T>,简单的说就是T类型在使用中只能作为返回类型出现在方法名的左边,于是他可以被自己的派生类赋值。
二、抗变
支持抗变的泛型参数用in标注,形式是<in T>,简单的说如T类型在使用中只能作为参数类型出现在括号的里面,因此他可以给自己的基类赋值。
例子如下:
class Class1:ITest<Object,String>
{
public object GetResult(string input)
{
return input;
}
public void GetResult2(string a)
{
Console.WriteLine(a);
}<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
public object GetResult3()
{
return new string(new char[3]);
}
}
public interface ITest<out T1, in T2>
{
T1 GetResult(T2 input);
void GetResult2(T2 a);
T1 GetResult3();
}