首页 > 其他分享 >1.Generic-泛型

1.Generic-泛型

时间:2023-09-04 10:24:33浏览次数:24  
标签:Generic 子类 逆变 协变 泛型 父类

一 Generic

如果使用Object会有哪些问题?
1.存在装箱、拆箱的性能问题
2.如果使用额外元素,会存在类型不安全的问题.

1 引入泛型:延迟声明
2 如何声明和使用泛型
3 泛型的好处和原理
4 泛型类、泛型方法、泛型接口、泛型委托
5 泛型约束
6 协变 逆变
7 泛型缓存

泛型 Generic 本质 ~占位符 (必须编译器支持)
1.泛型类、泛型方法、泛型接口、泛型委托

1.任何父类出现的地方都可以用子类替代;

2.泛型约束 :

1)基类约束 2)接口约束 3)引用类型约束 4)值类型约束 5)无参构造函数约束 关键字 where
值类型struct 、引用类型 Class 、父类、接口、new() 可实例化

3.协变&&逆变

协变 逆变 因为泛型存在的一个概念。只作用于 接口 委托之中

协变

协变原理
所谓的协变 就是 泛型可以用父类返回类型。关键词 out

关键词 out T只能做返回值
声明由子类参数,改为父类参数
例如:IEnumerable\Func<int>
List<string> listA = new List<string>();
IEnumerable<object> listB = new List<string>();
listB = listA;

Func<string> func1 = () => "";
Func<object> func = func1;

逆变

逆变原理
所谓逆变 就是 泛型中 可以用父类做参数类型。关键词 in

关键词 in T只能做参数
声明子类泛型  --实例化父类
例如:Action<object>

//声明父类 并实例化
Action<object> actionobj = t => { };

//声明子类 并实例化
Action<string> actionstring = actionobj;

//actionobj = actionstring;//这种编译器是报错的

标签:Generic,子类,逆变,协变,泛型,父类
From: https://www.cnblogs.com/vsnb/p/15867675.html

相关文章

  • Java泛型
    Java泛型1.泛型概述泛型的本质是为了参数化类型(即限制参数类型为我们指定泛型类型)如这样:给list集合指定类型String//比如给List集合指定一个泛型(String),那么存入List集合中的元素必须要是String类型List<String>list=newArrayList<String>();2.泛型的优点限制变量的类......
  • 泛型
    泛型(Generics)UTS支持泛型(Generics)特性,允许您编写更通用、可重用的代码,同时提高类型安全性。#定义泛型泛型使用尖括号 <> 声明一个或多个泛型参数。#泛型函数泛型函数的泛型参数定义在函数参数的圆括号之前。functiontest<T>(arg:T):T{returnarg}conststr:s......
  • C#中泛型集合List<T>反序列化问题及解决方法
    一、普通类型的反序列化程序集问题及处理方法在一些应用系统中常常有两个子系统软件A与B:A软件序列化一个数据文件,该文件将在B软件中使用。例如,在15年的交通运输部小样本调查数据的审核软件中,A软件就是笔者自己用的审核规则编制软件;B软件则是给用户使用的审核小样本调查数据的客户......
  • Java-泛型
    1.泛型介绍泛型的本质是参数化类型,这样在具体使用的时候可以临时确定是什么类型。泛型可以应用在类、接口、方法、集合中,被称为泛型类、泛型接口、泛型方法。Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(TypeErasure),将所有的泛型表示(尖括号中的内容)......
  • 泛型1例
    Tm=recordh,w:Integer;end;usesGenerics.Collections;varm1,m2:TList<Tm>;mr:Tm;i:Integer;beginm1:=TList<Tm>.Create;fori:=1to5dobeginmr.h:=i;mr.w:=i;m1.Add(mr);end;m2:=m1;......
  • 泛型
    为什么需要泛型?适用于多种数据类型执行相同的代码查看代码privatestaticintadd(inta,intb){System.out.println(a+"+"+b+"="+(a+b));returna+b;}privatestaticfloatadd(floata,floatb){System.out.println(a+"+"+b......
  • 泛型协变
    fromtypingimportTypeVar,GenericclassBeverage:❶"""任何饮料"""classJuice(Beverage):"""任何果汁"""classOrangeJuice(Juice):"""使用巴西橙子制作的美味果汁"""T=......
  • Gson读取json字符串中结果需要转泛型的情况解决方案
    原始代码:Gsongson=newGson();ArrayList<Fld>fixed=gson.fromJson(newFileReader(headFilePath),ArrayList.class);for(Fldfld:fixed){intfld_len=fld.getFld_len();}错误显示:com.g......
  • [React Typescript] Strongly Typing Lazy Loaded Components with Generics
    Navigatingtothetypedefinitionfor lazy by CMD+click inlocalVSCode,orinthe DefinitelyTyped repo.Wecanseethefollowingdefinition:functionlazy<TextendsComponentType<any>>( factory:()=>Promise<{default:T}>):L......
  • 通过重载签名来实现泛型不易实现的写法
    问题:实现一个TS方法,多个字符转或者多个数字相加首先会想到用泛型实现例如letsum=<T>(a:T,b:T):T=>a+b 但是这样会报“运算符+不可用于类型T”接下来我们可能会想到给类型T加上限制typeSunType=string|number;letsum=<TextendsSunType>(a:T,......