C# 泛型分析

1、object类型是一切类型的父类。

2、通过继承,子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类来代替。

但是上面object类型的方法又会带来另外一个问题:装箱和拆箱,会损耗程序的性能。

在泛型类型或方法定义中,类型参数是在其实例化泛型类型的一个变量时,客户端指定的特定类型的占位符。 泛型类( GenericList)无法按原样使用,因为它不是真正的类型;它更像是类型的蓝图。 若要使用 GenericList,客户端代码必须通过指定尖括号内的类型参数来声明并实例化构造类型。 此特定类的类型参数可以是编译器可识别的任何类型。 可创建任意数量的构造类型实例,其中每个使用不同的类型参数。

为什么泛型可以解决上面的问题呢?

泛型是延迟声明的:即定义的时候没有指定具体的参数类型,把参数类型的声明推迟到了调用的时候才指定参数类型。 延迟思想在程序架构设计的时候很受欢迎。例如:分布式缓存队列、EF的延迟加载等等。

泛型究竟是如何工作的呢?

控制台程序最终会编译成一个exe程序,exe被点击的时候,会经过JIT(即时编译器)的编译,最终生成二进制代码,才能被计算机执行。泛型加入到语法以后,VS自带的编译器又做了升级,升级之后编译时遇到泛型,会做特殊的处理:生成占位符。再次经过JIT编译的时候,会把上面编译生成的占位符替换成具体的数据类型。

泛型约束总共有五种。

| 约束 | s说明 | | ------------- | ------------------------------------------------------------ | | T:结构 | 类型参数必须是值类型 | | T:类 | 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。 | | T:new() | 类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 | | T:<基类名> | 类型参数必须是指定的基类或派生自指定的基类。 | | T:<接口名称> | 类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。 |

1、基类约束

上面打印的方法约束T类型必须是People类型。

注意:

基类约束时,基类不能是密封类,即不能是sealed类。sealed类表示该类不能被继承,在这里用作约束就无任何意义,因为sealed类没有子类。

2、接口约束

3、引用类型约束 class

引用类型约束保证T一定是引用类型的。

4、值类型约束 struct

值类型约束保证T一定是值类型的。

5、无参数构造函数约束 new()

相关推荐

  1. C# 分析

    2024-06-15 08:38:03       9 阅读
  2. c#(Generic)

    2024-06-15 08:38:03       37 阅读
  3. c# 定义

    2024-06-15 08:38:03       16 阅读
  4. C++ STL算法

    2024-06-15 08:38:03       27 阅读
  5. C#接口和

    2024-06-15 08:38:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 08:38:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 08:38:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 08:38:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 08:38:03       18 阅读

热门阅读

  1. 找工作小项目:day15-macOS支持、完善逻辑

    2024-06-15 08:38:03       6 阅读
  2. 自动化机械臂喷涂生产线方案五

    2024-06-15 08:38:03       8 阅读
  3. AWD攻防比赛流程手册

    2024-06-15 08:38:03       7 阅读
  4. 公链常用的共识算法

    2024-06-15 08:38:03       8 阅读
  5. 探索 Spring Boot 集成缓存功能的最佳实践

    2024-06-15 08:38:03       8 阅读
  6. 第十三章:huggingface的resume训练源码内容

    2024-06-15 08:38:03       7 阅读
  7. 用python写一个企业知识库算法

    2024-06-15 08:38:03       8 阅读
  8. ADBMS1818驱动程序解析

    2024-06-15 08:38:03       7 阅读
  9. 浏览器无痕模式和非无痕模式的区别

    2024-06-15 08:38:03       6 阅读
  10. MySQL + Keepalived自动切换

    2024-06-15 08:38:03       6 阅读
  11. 2024年考什么证书值钱?着急提升看过来!

    2024-06-15 08:38:03       9 阅读