那些年为何搞不懂的协变、逆变、不变体术语概念是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2725个文字,预计阅读时间需要11分钟。
简述什么是协变性、逆变性和不变性:协变性,例如:string -> Object(子类到父类的转换)逆变性,例如:Object -> string(父类到子类的转换)不变性,基于上述两种情况,不可变。
简述什么是协变性、逆变性、不变性- 协变性,如:string->object (子类到父类的转换)
- 逆变性,如:object->string (父类到子类的转换)
- 不变性,基于上面两种情况,不可变。具体下面再做分析。
先使用框架定义的泛型委托Func和Action做例子(不了解的请戳)
协变:(string->object)
Func<string> func1 = () => "农码一生"; Func<object> func2 = func1;
逆变:(object->string)
Action<object> func3 = t => { }; Action<string> func4 = func3;
上面代码没有任何问题。
接着我们自己定义委托试试:
我X,看人不来哦。为什么自定义的委托却不能协变呢。
本文共计2725个文字,预计阅读时间需要11分钟。
简述什么是协变性、逆变性和不变性:协变性,例如:string -> Object(子类到父类的转换)逆变性,例如:Object -> string(父类到子类的转换)不变性,基于上述两种情况,不可变。
简述什么是协变性、逆变性、不变性- 协变性,如:string->object (子类到父类的转换)
- 逆变性,如:object->string (父类到子类的转换)
- 不变性,基于上面两种情况,不可变。具体下面再做分析。
先使用框架定义的泛型委托Func和Action做例子(不了解的请戳)
协变:(string->object)
Func<string> func1 = () => "农码一生"; Func<object> func2 = func1;
逆变:(object->string)
Action<object> func3 = t => { }; Action<string> func4 = func3;
上面代码没有任何问题。
接着我们自己定义委托试试:
我X,看人不来哦。为什么自定义的委托却不能协变呢。

