首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏代码手工艺人

    Swift 之类型的协变与逆变

    —沃茨•其索特 1 什么是协变与逆变 刚开始看到协变(Covariance)和逆变(Contravariance)的时候,差点晕菜,反复查了一些资料,才稍有些自己的体会,难免有理解不对的地方,欢迎指出 相对于原始类型,这两种复杂类型之间的关系只能是不变(invariance),协变(covariance)和逆变(contravariance)之中的某一种。 Reference Swift 2.1 Function Types Conversion: Covariance and Contravariance Friday Q&A 2015-11-20: Covariance and Contravariance

    1.2K20发布于 2021-09-07
  • 来自专栏前端从进阶到入院

    深入 TypeScript 中的子类型、逆变、协变,进阶 Vue3 源码前必须搞懂的。

    前言 TypeScript 中有很多地方涉及到子类型 subtype、父类型 supertype、逆变和协变covariance and contravariance的概念,如果搞不清这些概念,那么很可能被报错搞的无从下手 逆变和协变 先来段维基百科的定义: 协变与逆变(covariance and contravariance)是在计算机科学中,描述具有父/子型别关系的多个型别通过型别构造器、构造出的多个复杂型别之间是否有父 逆变(Contravariance) 有这样两个函数: let visitAnimal = (animal: Animal) => void; let visitDog = (dog: Dog) => 在对 Animal 和 Dog 类型分别调用如下的类型构造器之后: type MakeFunction = (arg: T) => void 复制代码 父子类型关系逆转了,这就是 逆变(Contravariance

    1.5K31发布于 2020-10-15
  • 来自专栏WPF

    了解C#的协变和逆变

    Contravariance 使你能够使用比原始指定的类型更泛型(派生程度更小)的类型。 你可以将 Action 的实例分配给 Action 类型的变量。 关键子标识,并且占位符T只能用于只读属性、方法或者委托的返回值,out简而易懂,就是输出的意思 当要进行类型转换,占位符T要转换的目标类型也必须是其基类,上述例子则是Foo隐式转为FooBase 逆变(Contravariance

    1.4K10编辑于 2022-05-07
  • 来自专栏iOS开发~

    iOS_泛型 Generics __covariant(协变) __contravariant(逆变)

    Nonnull [_Nullable])keys count:(NSUInteger)cnt NS_DESIGNATED_INITIALIZER; 参考: iOS 强大的泛型 Covariance and contravariance (computer science) 2015 Objective-C 新特性 Covariance, Contravariance以及Generics在 Swift/OC 中的应用.

    1.5K10编辑于 2022-07-20
  • 来自专栏JusterZhu

    事件与委托(一)

    委托可以接受比她的方法目标更具体的参数类型,这个叫ContraVariance 和泛型参类型一样,委托的Variance仅支持引用转换 delegate void StringAction(string Covariance,out; ContraVariance,in; delegate object ObjectRetriever(string s); class Demo { static

    68520编辑于 2022-12-07
  • 来自专栏WD学习记录

    本地缓存和分布式缓存的比较 堆污染

    逆变(contravariance) 3.

    1.3K30发布于 2019-08-14
  • 来自专栏前端壹栈

    TypeScript 中的逆变、协变和双向协变

    通过协变和逆变原则 协变与逆变(covariance and contravariance)是在计算机科学中,描述具有父/子型别关系的多个型别通过型别构造器、构造出的多个复杂型别之间是否有父/子型别关系的用语 why-are-functions-with-fewer-parameters-assignable-to-functions-that-take-more-parameters what are covariance and contravariance

    1.6K20编辑于 2021-12-27
  • 来自专栏前端劝退师

    Typescript 严格模式有多严格?

    ,这里有篇介绍: 协变(covariance)和抗变(contravariance)是什么?[1] 协变和逆变维基上写的很复杂,但是总结起来原理其实就一个。 参考资料 [1] 协变(covariance)和抗变(contravariance)是什么? :https://www.stephanboyer.com/post/132/what-are-covariance-and-contravariance [2] How strict is Typescript

    2.7K40发布于 2019-11-07
  • 来自专栏tkokof 的技术,小趣及杂念

    编程小知识之协变和逆变

    所谓逆变(Contravariance),是指能够使用比原始指定的类型派生程度更小的类型,简单理解就是 父类转为子类 这种变化. C# 中逆变对应的关键字为 in, 我们同样先来看个示例: // generics contravariance delegate public delegate void ContravarianceDelegate

    1.2K30发布于 2019-01-28
  • 来自专栏PHPer技术栈

    PHP7.2新特性

    abstract function test(string $s); } abstract class B extends A { // overridden - still maintaining contravariance

    1.1K50发布于 2019-08-28
  • 来自专栏程序员修炼之路

    Android经典实战之用Kotlin泛型实现键值对缓存

    型变(Variance) Kotlin 中的型变分为协变(Covariance)和逆变(Contravariance)。协变允许子类型替换父类型,而逆变则相反。

    43910编辑于 2024-08-27
  • 来自专栏DotNet 致知

    变体(variance)

    变体(variance)是协变(convariance)和抗变(也说逆变contravariance)的统称。

    64120编辑于 2022-03-29
  • 来自专栏dylanliu

    设计原则之里氏替换原则(LSP)

    LSP 对语言增加了新的签名约束(协变与逆变可以看这篇文章Java中的逆变与协变): Contravariance of method arguments in the subtype.

    1.5K40发布于 2019-07-01
  • 来自专栏菩提树下的杨过

    c#4.0中的不变(invariant)、协变(covariant)、逆变(contravariant)小记

    4.0中的泛型协变和反变 (2008年他就已经搞明白了这个概念)、偶像Artech的“C# 4.0新特性-"协变"与"逆变"以及背后的编程思想” 以及1-2-3的 协变(Covariance)和逆变(Contravariance

    1.1K100发布于 2018-01-22
  • 来自专栏大内老A

    C# 4.0新特性-"协变"与"逆变"以及背后的编程思想

    在《上篇》中我们揭示了“缺省参数”的本质,现在我们接着来谈谈C#4.0中另一个重要的新特性:协变(Covariance)与逆变(Contravariance)。 五、逆变实现了“算法”的重用 实际上关系协变和逆变体现出来的编程思想,还有一种我比较推崇的说法,那就是:协变是继承的体现,而逆变体现的则是多态(可以参考idior的文章《Covariance and Contravariance

    82780发布于 2018-02-07
  • 来自专栏golang从入门到进阶

    为什么 Go 不支持变型?深入理解类型系统中的协变与逆变

    变型分为三类:类型含义示例协变(Covariance)子类型关系被保留[]Cat→[]Animal(若允许)逆变(Contravariance)子类型关系被反转func(Animal)→func(Cat

    7510编辑于 2026-02-14
  • 来自专栏掘金文章

    一文了解 Java/Kotlin 中的泛型

    Java 中的泛型泛型的型变(variance)协变(Covariance):子类泛型是父类泛型的子类型,可以把子类泛型赋值给父类泛型逆变(Contravariance):父类泛型(可以看作)是子类泛型的子类型 Animal 的子类):协变(Covariance):List<Dog> 是 List<Animal> 的子类型,List<Dog> 类型的对象可以赋值给 List<Animal> 类型的变量逆变(Contravariance 子类可以赋值给父类List.add()方法的参数类型是 T,new Animal() 得到的对象作为一个父类型的实参,不可以赋值给子类型的形参,因此编译失败// 逆变,只写不可读private void contravariance

    1.4K52编辑于 2022-06-29
  • 来自专栏掘金文章

    一文了解 Java/Kotlin 中的泛型

    Java 中的泛型泛型的型变(variance)协变(Covariance):子类泛型是父类泛型的子类型,可以把子类泛型赋值给父类泛型逆变(Contravariance):父类泛型(可以看作)是子类泛型的子类型 Animal 的子类):协变(Covariance):List<Dog> 是 List<Animal> 的子类型,List<Dog> 类型的对象可以赋值给 List<Animal> 类型的变量逆变(Contravariance 子类可以赋值给父类List.add()方法的参数类型是 T,new Animal() 得到的对象作为一个父类型的实参,不可以赋值给子类型的形参,因此编译失败// 逆变,只写不可读private void contravariance

    1.1K20编辑于 2022-06-29
  • 来自专栏Android相关

    Kotlin---泛型

    : 0 } } 协变(Covariant)与逆变(Contravariance) 在Java中同样也有这两种类型变换。对于Java而言,也就是: 协变:List<?

    1.2K30发布于 2019-03-15
  • 来自专栏简易现代魔法

    协变、逆变与不变

    型变 型变(variance)是类型系统里的概念,包括协变(covariance)、逆变(contravariance)和不变(invariance)。 参考资料 Covariance and contravariance (computer science) - Wikipedia ↩ The Origins of Scala ↩ Dean

    2.4K30发布于 2021-08-10
领券