C# 泛型委托的可逆变不能协变的问题?
//定义两个泛型委托实现
static void SetObject(object o) { }
static void SetString(string s) { }
Action<object> actObject = SetObject;
Action<string> actString = actObject; //ok
Action<string> actString1 = SetString;
Action<object> actObject1 = actString1;//编译不通过 why??
------解决方案--------------------比如说你设计了这样一个函数:
int GetStringLength(string s) { ... }
传入string可以得到它的长度,但是传入object,如果这个object不是string,比如是Color,那就不合法。
反过来,你设计这样一个函数:
Type GetObjectType(object o) { ... }
传入任何object都可以得到它的类型,当然,你传入string,string是一种object,它也能得到Type。
------解决方案--------------------看看Action的定义吧:
public delegate void Action<in T>(T obj);
看到那个in了没?对参数仅支持逆变哦!