协变与逆变

父类 = 子类 协变 in don't safty
子类 = 父类 逆变 out

委托
public delegate T MyFuncB<out T>(); 协变

public delegate void MYActionB<in T>(T param); 逆变

public delegate T MyFuncB<out T>(); //支持协变
MyFuncB<object> funcBObject = null;
MyFuncB<string> funcBString = null;
funcBObject = funcBString; //协变

public delegate void MyActionB<in T>(T param); //支持逆变
MyActionB<object> actionBObject = null;
MyActionB<string> actionBString = null;
actionBString = actionBObject; //逆变

接口
public interface IFlyB<out T> { } //支持协变
public interface IPlayB<in T> { } //支持逆变

string Base<string>.Test(string param)
object Base<object>.Test(object param)

原文地址:https://www.cnblogs.com/longcloud/p/2996697.html