那些年为何搞不懂的协变、逆变、不变体术语概念是什么?

2026-05-27 10:090阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计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,看人不来哦。为什么自定义的委托却不能协变呢。

阅读全文