首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin】 ③ ( out 协变 | in 逆变 | invariant 不变 | 逆变协变代码示例 | 使用 reified 关键字检查参数类型 )

文章目录 一、 out 协变 二、 in 逆变 三、 invariant 不变 四、逆变协变代码示例 五、使用 reified 关键字检查参数类型 本章总结 : 使用 out...作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 在 参数使用 out 关键字 , 同时 该 类 又称为 生产类 ( 生产接口 ) , 用于生产 类 指定的对象...- 使用 in 关键字 , 可以使 父类对象 赋值给 子类对象 ; 在 类 中 , 如果只将 类型 作为 函数的参数 类型 , 则在 声明 参数 类型 时 , 在 参数 前...类型 作为 函数的返回值 类型 , 则在 声明 参数 类型 时 , 既不使用 in 关键字 , 又不使用 out 关键字 ; 代码示例 : 在下面的接口中 , 类型 即用于作为 返回值 ,..., 通过 反射 可以实现 ; Java 类对象.javaClass.name == "要判断的类的全类名" 在 函数 中 使用 reified 关键字 , 需要在 尖括号 中 类型 之前

1.6K10
您找到你想要的搜索结果了吗?
是的
没有找到

不变(Invariant), 协变(Covarinat), 逆变(Contravariant) : 一个程序猿进化的故事

输入参数类型 - 逆变规则:给一个函数参数赋一个函数值时,传入函数的输入参数类型,可以是函数参数对应的参数类型的父类。...输入参数类型 - 协变不能规则:给一个函数参数赋一个函数值时,传入函数的输入参数类型,不能是函数参数对应的参数类型的子类。...输出参数类型 - 不变规则:给一个函数参数赋一个函数值时,传入函数的返回值类型,可以是函数参数对应的参数类型。...输出参数类型 - 协变规则:给一个函数参数赋一个函数值时,传入函数的返回值类型,可以是函数参数对应的参数类型的子类。...输出参数类型 - 逆变不能规则:给一个函数参数赋一个函数值时,传入函数的返回值类型,不能是函数参数对应的参数类型的父类。

2.3K50

浅谈

的目的及优点 我们在写一些通用库的时候,经常需要写一个算法,比如交换,搜索,比较,排序,转换等算法,但是需要支持int,string等多种类型。通常我们可能会把代码复制多遍分别处理不同类型的数据。...下面展示了类的定义: // List 类 // IList 接口 // T:类型参数,在定义类的时候不设定,在使用类的时候指定具体类型,如int,string等 public...T是变量名,源代码能使用数据类型的任何地方都可以使用T。 5. 参数变量要么是T,要么至少以T开头,如TKey和TValue。大写T代表类型(Type)。 6....定义好之后,其他开发人员可以使用这个算法,使用的时候需要指定具体数据类型,这个具体数据类型称为类型实参。...所以,我们需要一种机制,让变得真正有用。幸好,编译器和CLR支持称为约束的机制。约束的作用是限制能指定成实参的类型范围。

1K30

C#方法解析

是CLR和C#提供的一种特殊机制,支持另一种形式的代码重用,即“算法重用”。实现了类型和方法的参数化,类型和方法也可以让参数告诉使用使用什么类型。    ...定义类型或方法时,为类型指定了任何变量(如:T)都称为类型参数。(T是一个变量名,在源代码中能够使用一个数据类型的任何位置,都可以使用T)在C#中参数变量要么成为T,要么至少一大写T开头。...:类型参数。 Conver:参数类型委托)。 conv:参数名。    ...对以上的示例代码分析,需要掌握:为每个类型参数使用一个不同的类型,在整体应用这些类型参数。  ...> conv)   (2).处理完T后,再需要处理的就是TOutput,可以看出它是一个方法类型参数,这里采用guid替换TOutput

3.3K90

二维码的生成

本文链接:https://blog.csdn.net/CJB_King/article/details/52514236 [+] 二维码识别和生成二维码 前言有的时候需要进行二维码扫描但是二维码是怎么在...Unity中进行生成呢本文将介绍到同时还会涉及到另外一个插件可以进行对二维码的扫描 正文 二维码识别和生成二维码 前言:有的时候需要进行二维码扫描,但是二维码是怎么在Unity中进行生成呢?...BarcodeCam的C#脚本,然后把以下脚本拖放进去,把脚本拖放到摄像机运行即可,就可以根据参数生成二维码了。...System.IO; public class BarcodeCam : MonoBehaviour { public Texture2D encoded;//生成的二维码为Texture2D类型...public string Lastresult;//二维码中所包含的内容信息,我是使用了GUID进行代替 public int count = 5;//生成几个二维码

94630

C#-Xamarin的Activity传值与Fragment引用

这样,我们的子页面就做好了;下面需要做的就是到主页面里引用这个子页面。...也就是说,PutExtra只能传图中给定类型参数,想传自定义类型参数是不可以的。 下面我们定义一个按钮点击事件,然后传递两个参数给新的页面。...Activity的属性Intent的GetStringExtra方法接收了第一个参数,而接收第二个参数,我们使用了GetIntExtra方法。...也就是说,在接收上个页面传来的数据时,我们需要根据数据类型,来调用该类型对应的接收方法,来接收数据。 参数传递界面如下图所示: ?...相关文章: C#-Xamarin利用ZXing.Net.Mobile进行扫码 C#-Xamarin的Android项目开发(三)——发布、部署、打包 C#-Xamarin的Android项目开发(二)—

1K30

C#开发移动应用系列(3.使用照相机扫描二维码+各种基础知识)

前言 上篇文章地址: C#开发移动应用系列(1.环境搭建) C#开发移动应用系列(2.使用WebView搭建WebApp应用) 今天我们来讲一下如何使用Camera来调用照相机扫描二维码....,设置图片类型为Jpeg.重新把参数赋值给照相机....里面有两个参数 public void OnPreviewFrame(byte[] data, Android.Hardware.Camera camera) 很明显,这个字节类型的data就是每次照相机预览传回来的当前帧的图片信息...很遗憾QRCode,使用的是GDI+ 也就是System.drawing..很明显..我们在手机端..调用不到.. 所以只能用ZXing.Net 我们在nuget中搜索ZXing.Net....类型很多..而且有各种版本..我们选择ZXing.Net.Mobile, 当然这里还有个ZXing.Net.Mobile.Forms,这个是封装好的二维码扫描控件..本文主要是学习,所以不使用(当然..

1.1K50

C#入门类、集合、方法、约束、委托

(人们大多把这称作模板)不论使用哪个定义,参数在真正使用时都必须作出指明 官方的解释虽然很难理解,用我的话来解释那就是,声明类和方法时一般都需要定义是什么类,class Brid ,Class...Food… 声明类和方法时只需要传入类型的地方用 ,有点类似于占位符的作用,用的时候传入具体的类型。...当针对不同类型具有相同行为的时候,也就是发挥作用的时候。 优点: 1.使用类、方法,我们可以极大提高代码的重用性,不需要类型不同代码相同(仅类型参数不同)的代码写多次。...; 5.委托 public delegate TOutput GenericDelagete(TInput input); 6.结构 struct MyGenericStruct...###类型参数约束### 为什么要使用类型参数的约束呢,简单点说就是筛选类型参数,在使用的代码中如果违反了某个约束不允许的类型来实例化则会产生编译错误,类型参数的约束是使用关键字where。

2.5K30

C#规范整理·委托事件

基于,我们得以将类型参数化,以便更大范围地进行代码复用。同时,它减少了类及方法中的转型,确保了类型安全。...尤其是在它们的版本出来以后,已经能够满足我们在实际编码过程中的大部分需要。 我们应该习惯在代码中使用这类委托来代替自己的委托声明。...11.使用参数兼容接口的不可变性# 让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”。...12.让接口中的参数支持协变# 除了11中提到的使用参数兼容接口的不可变性外,还有一种办法就是为接口中的声明加上out关键字来支持协变。...out关键字是FCL 4.0中新增的功能,它可以在接口和委托中使用,用来让类型参数支持协变性。通过协变,可以使用比声明的参数派生类型更大的参数。通过下面例子我们应该能理解这种应用。

22830

浅谈委托

委托的定义 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性...因为类型不匹配。方法的种类是根据它的参数数量、参数类型和返回类型决定的。所以我们说委托是类型安全的。另外,委托与string相同,string是一个类型,那么委托也是一个类型,或者叫类(Class)。...1.Action是无返回值的匿名委托。Action表示有传入参数int,string无返回值的委托。 2.Func是有返回值的委托。...(TInput input); 委托的缺点 当用委托定义一个类的字段时,它的封装性和安全性不好。...如果字段不是一个委托类型,而是一个string类型,你会怎么做?答案是使用属性对字段进行封装。

71330

C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)

列表的Github地址如下: https://github.com/xamarin/XamarinComponents 今天我们主要是以设备信息组件为例子介绍一下如何使用社区组件 首先我们需要查询到自己需要使用的组件...的NuGet GitHub上 @NateRickard 电池状态 收集电池电量,充电状态和类型。...的NuGet GitHub上 @JamesMontemagno 扫码机 使用ZXing.NET.Mobile扫描和创建条形码。...注意,这里要强调的一点是,当你使用这些组件的时候,一定需要PCL项目加上客户端项目,都要引用 也就是如图: ?...需要仔细看文档说明,有些插件是需要初始化的,所以需要你在客户端项目中初始化,比如二维码插件( ZXing.Net.Mobile) 剩下的代码就很简单了,我们先创建一个Page,并添加listView控件如下

4K71

C# 中关于 T

前言 C# 里面的不仅可以使用型函数、接口,也可以使用类、委托等等。在使用的时候,它们会自行检测你传入参数类型,因此它可以为我们省去大量的时间,不用一个个编写方法的重载。...一、类型参数和运行时中的 1.1、类型参数类型或方法定义中,类型参数是在其创建类型的一个实例时,客户端指定的特定类型的占位符。...当首次构造类型使用类型作为参数时: 运行时会为类型创建专用空间,MSIL 执行过程中会在合适的位置,替换传入的一个或多个参数。为每种用作参数类型,创建专用化类型。...通过使用接口,可以在不修改代码的情况下,轻松地添加新的类型或修改现有类型的属性和方法。 四、方法 方法是通过类型参数声明的方法。...如果需要使用类型参数(而不是类实例化时提供的参数)调用类方法,可以考虑为此方法的类型参数提供另一标识符,如下示例中 GenericList2 所示。

26540

C# 中关于

前言 C# 里面的不仅可以使用型函数、接口,也可以使用类、委托等等。在使用的时候,它们会自行检测你传入参数类型,因此它可以为我们省去大量的时间,不用一个个编写方法的重载。...一、类型参数和运行时中的 1.1、类型参数类型或方法定义中,类型参数是在其创建类型的一个实例时,客户端指定的特定类型的占位符。...当首次构造类型使用类型作为参数时: 运行时会为类型创建专用空间,MSIL 执行过程中会在合适的位置,替换传入的一个或多个参数。为每种用作参数类型,创建专用化类型。...通过使用接口,可以在不修改代码的情况下,轻松地添加新的类型或修改现有类型的属性和方法。 四、方法 方法是通过类型参数声明的方法。...如果需要使用类型参数(而不是类实例化时提供的参数)调用类方法,可以考虑为此方法的类型参数提供另一标识符,如下示例中 GenericList2 所示。

34320

如何使用C#中的Action,Func和Predicate?

image.png Func 和 Action 是什么,如何使用? 两者最基本的区别是,前者适合那些需要带返回值的委托,后者适合那些不带返回值的委托。...Predicate所引用的方法接收一个或者多个参数并且返回一个 bool 值,你可以假定它等价于 Func,Predicate 常用于对 collection 进行一组条件检索。...C# 中使用 Action 你可以使用 委托 去实现事件和回调方法,C#委托非常类似于C++中的函数指针,但是 C# 中的 委托 是类型安全的,你可以将方法作为参数传递给委托从而让委托指向该方法。...Func 接下来的代码片段展示了如何在 C# 中使用 Func 委托,最终方法会打印出 Hra(基本薪资的 40%) 的值,基本薪资是作为参数传下去的,如下代码所示...,在上面这个例子中,它就是计算后的 Hra 值,作为 double 返回。

2.5K20

C#4.0新增功能03 中的协变和逆变

类型参数支持协变和逆变,可在分配和使用类型方面提供更大的灵活性。 在引用类型系统时,协变、逆变和不变性具有如下定义。...Contravariance 使你能够使用比原始指定的类型(派生程度更小)的类型。...Invariance 这意味着,你只能使用原始指定的类型;固定类型参数既不是协变类型,也不是逆变类型。...当代码需要派生程度较大的类型的比较器 (Shape) 时,该示例可以传递派生程度较小的类型的比较器 (Circle),因为 IComparer 接口的类型参数是逆变参数。...然后,使用类型参数的协变和逆变,将得到的委托指派给另一个变量,此变量的委托类型参数类型为 Type3 ,返回类型为 Type1。

1.3K20
领券