协变与逆变
父类 = 子类 协变 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)