首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

TypeScript 中的逆、协和双向协

前言 为什么需要引入逆、协和双向协这些概念 因为考虑到类型兼容,详情参考https://www.typescriptlang.org/docs/handbook/type-compatibility.html...animal 实例上缺少属性 'bark' 协和逆 如何处理类型兼容呢?...通过协和逆原则 协与逆(covariance and contravariance)是在计算机科学中,描述具有父/子型别关系的多个型别通过型别构造器、构造出的多个复杂型别之间是否有父/子型别关系的用语...维基百科上关于协和逆的解释有点晦涩难懂。...这里,我们用更通俗一点的语言来表述: 协:允许子类型转换为父类型(可以里式替换LSP原则进行理解) 逆:允许父类型转换为子类型 逆 // Dog ≼ Animal var feedAnimal

1K20

C#协和逆

msdn 解释如下:  “协”是指能够使用与原始指定的派生类型相比,派生程度更大的类型。  “逆”则是指能够使用派生程度更小的类型。  解释的很正确,大致就是这样,不过不够直白。 ...直白的理解:  “协”->”和谐的”->”很自然的变化”->string->object :协。  “逆”->”逆常的”->”不正常的变化”->object->string 逆。 ...上面是个人对协和逆的理解,比起记住那些派生,类型,原始指定,更大,更小之类的词语,个人认为要容易点。 ...我个人的理解: 因为协和逆的英文太复杂了,并没有体现协和逆的不同,但是out 和 in 却很直白。...上面演示的是协,接下来要演示下逆

91930

泛型协与抗(二)

NET 4通过协和抗变为泛型接口和泛型委托添加了一个重要的扩展。协和抗指对参数和返回值的类型进行转换。   ...我们来看下到底什么是协什么是抗: 如果某个返回的类型可以由其基类替换,那么这个类型就是支持协的   如果某个参数类型可以由其派生类替换,那么这个类型就是支持逆(抗)的。...这里就比较接近泛型接口的协和抗的概念了。...理解泛型接口的协和抗(in、out)   我们下面来看看泛型接口的协及抗的例子:   首先我们看下协,在C#高级编程(第十一版)中指出,如果泛型类型用out关键字标注,泛型接口就是协的。...协:(使用关键字out)返回类型可以由其基类所替代的时候,就是支持协的。     抗(逆):(使用关键字in)传入参数类型可以由其派生类所代替的时候,就是支持抗(逆)的。

78120

“协”、“逆”与Delegate类型转换

之后又想到了其他一些相关的东西,除了简单地分析如何通过Emit实现EventHandler的类型转换之外,还加上关于Delegate“协”与“逆”的一些东西,算是对前一篇文章的完善。...目录 一、从Delegate的“协”与“逆”说起 二、EventHandler是否换一种定义方式更好?...四、通过Emit实现EventHandler的类型转换 五、最简单的转换方式 一、从Delegate的“协”与“逆”说起 根据Delegate“协”与“逆”的原理,对于两个具有相同声明的两个...我们在定义泛型Delegate的时候可以利用C#“协”与“逆”,使类型为A对象能够赋值给类型为B的变量。...如果事件类型对于得Delegate并没有采用逆方式定义,那么要求我们注册一个与之类型完全一致的Delegate。

80470

快速理解 TypeScript 的逆和协

深入学习 TypeScript 类型系统的话,逆、协、双向协、不变是绕不过去的概念。 这些概念看起来挺高大上的,其实并不复杂,这篇文章我们就来学习下它们吧。...这种“型”分为两种,一种是子类型可以赋值给父类型,叫做协,一种是父类型可以赋值给子类型,叫做逆。...父子类型之间自然应该能赋值,也就是会发生型。 型分为逆和协。协很容易理解,就是子类型赋值给父类型。...不过 ts 2.x 之前反过来依然是可以赋值的,也就是既逆又协,叫做双向协。...理解了如何判断父子类型(结构类型系统),父子类型的型(逆、协、双向协),很多类型兼容问题就能得到解释了。

1.5K40

C#进阶-协与逆

这种子类到父类的转换就是协。而另外一种类似于父类转向子类的变换,可以简单的理解为逆。逆可以用于泛型委托和泛型接口,本篇文章我们将讲解C#里逆和协的使用。...逆和协的语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。...协与逆(共):泛型委托或泛型接口的类似于父类转向子类的变换; 逆(反):泛型委托或泛型接口的类似子类到父类的隐式转换; 逆与协用来描述类型转换后的继承关系,其定义:如果A、B表示类型...,和string与Object的父子关系是相反的; 协和逆能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。...InterfaceFuncObject = InterfaceFuncInt;//编译失败,值类型不参与协或逆 //泛型接口-逆 InterfaceFuncB<object

8810

《现代Typescript高级教程》协和逆

现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 类型兼容:协和逆 引言 在类型系统中,协和逆是对类型比较(类型兼容)一种形式化描述。...在其他一些类型系统中,例如 TypeScript,协和逆的规则是隐式嵌入的,通过类型兼容性检查来实现。 协和逆的存在使得类型系统具有更大的灵活性。...这就是协。反过来,如果你有一个处理Animal类型对象的函数,并且你有一个Dog类型的对象,你应该可以使用这个函数来处理Dog对象。这就是逆。 协和逆还可以帮助我们创建更通用的代码。...Contravariance) 逆是协的反面。...因此,函数的参数类型是逆的。 逆:类型的向上兼容性 逆描述的是类型的“向上兼容性”。

13610

了解C#的协和逆

前言 在引用类型系统时,协、逆和不变性具有如下定义。 这些示例假定一个名为 Base 的基类和一个名为 Derived的派生类。...固定泛型类型参数既不是协,也不是逆。 你无法将 List 的实例分配给 List 类型的变量,反之亦然。 以上来自于官方文档对协、逆、不变性的解释 为啥C#需要协和逆?...在C#中,目前只有泛型接口和泛型委托可以支持协和逆, 协(Covariance) 内置的泛型协接口,IEnumerator、IQuerable、IGrouping<Tkey, TElement...、方法或者委托的输入参数 当要进行类型转换,占位符T要转换的目标类型也必须是其子类,上述例子则是FooBase转为Foo 总结 协和逆只对泛型委托和泛型接口有效,对普通的泛型类和泛型方法无效 协和逆的类型必须是引用类型...,因为值类型不具备继承性,因此类型转换存在不兼容性 泛型接口和泛型委托可同时存在协和逆的类型参数,即占位符T 参考 泛型中的协和逆 | Microsoft Docs 《你必须知道的.NET(第2

88410

Java泛型的协和逆

背景 文接上回,说到过Java的泛型擦除问题,这块我又联想到一个有意思的考点泛型的协和逆。...一、协 首先Java的数组是协的,所以假设A是B的父类,那么A[]是可以保存A或者B的对象的,并且A[]是B[]的父类。 ,写谁都会写,子类型限定。...二、逆 ,超类型限定。 逆同样也是在各类源码中层出不穷,结合协的理解,这块相信大家应该不难理解。 常见的例子比如,List<?...通俗理解生产者为协,消费者为逆。 针对于生产者,可取,有上界;针对于消费者,可存,有下界。...理解它,也可以通过Java的继承关系, 假设存在继承关系Object-》T、T-》A、T-》B; 即T为A、B的父类,协面向子类;逆面向Object,它是所有对象的父类。

62500
领券