泛型

简介: 泛型

泛型实现了类型参数化,达到代码重用的目的,通过类型参数化来实现同一份代码上操作多种类型。泛型相当于类型占位符,定义类或方法时使用替代符代表变量类型,当使用类或者方法时再具体指定变量。

泛型允许我们延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候,例如:分布式缓存队列、EF的延迟加载等等。换句话说,泛型允许我们编写一个可以与任何数据类型一起工作的类或方法。我们可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。

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

泛型类和泛型接口的基本语法:

class 类名<泛型占位字母>
interface 接口名<泛型占位字母>

泛型函数的基本语法:

函数名<泛型占位字母>(参数列表)//需要主义的是,泛型占位字母可以有多个,但是需要用逗号隔开

泛型的特性

使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:

它有助于我们最大限度地重用代码、保护类型的安全以及提高性能。

我们可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。我们可以使用这些泛型集合类来替代 System.Collections 中的集合类。

我们可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。

我们可以对泛型类进行约束以访问特定数据类型的方法。

关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。


泛型委托

我们可以通过下列代码来类型参数定义泛型委托。

delegate T NumberChanger<T>(T n);

泛型的作用

1. 不同类型对象的相同逻辑处理就可以选择泛型。

2. 使用泛型可以一定程度避免装箱拆箱。

需要注意的是,泛型真正起作用的时候,是在使用它的时候。

Js_x
+关注
目录
打赏
0
0
0
0
3
分享
相关文章
Python 虚拟环境配置
本文总结了 Python 开发中的环境配置、常用操作和常见错误处理。重点介绍了如何使用 `virtualenv` 搭建虚拟环境,解决依赖冲突问题,并保持系统环境的干净。同时,详细说明了依赖库的安装与管理方法,包括使用 `pip install` 安装依赖、生成和使用 `requirements.txt` 文件,以及查看 Python 文档和修改环境变量等实用技巧。
434 60
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
4.3 图像分类ResNet实战:眼疾识别
这篇文章介绍了使用ResNet网络进行眼疾识别的实战流程,涵盖了计算机视觉任务研发的全流程,包括数据处理、数据预处理、数据读取器的定义,以及如何利用iChallenge-PM数据集进行模型训练和评估。
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
238 2
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
MySQL 给数据表增加一列,一定会锁表吗?
【8月更文挑战第8天】在数据库管理和开发中,给数据表增加一列是一个常见的操作。然而,当面试官提出“MySQL 给数据表增加一列,一定会锁表吗?”这一问题时,答案并非绝对。这主要取决于MySQL的版本、存储引擎以及具体的操作方式。
582 0
揭秘!JDK动态代理VS CGLIB:一场关于Java代理界的‘宫心计’,你站哪队?
【8月更文挑战第24天】Java 动态代理是一种设计模式,允许在不改动原类的基础上通过代理类扩展功能。主要实现方式包括 JDK 动态代理和 CGLIB。前者基于接口,利用反射机制在运行时创建代理类;后者采用继承方式并通过字节码技术生成子类实现类的代理。两者在实现机制、性能及适用场景上有明显差异。JDK 动态代理适用于有接口的场景,而 CGLIB 更适合代理未实现接口的类,尽管性能更优但存在一些限制。开发者可根据需求选择合适的代理方式。
344 0
5.3 目标检测YOLOv3实战:叶病虫害检测
这篇文章介绍了使用YOLOv3模型进行叶病虫害检测的实战过程,包括数据预处理、模型构建、训练和评估等关键步骤。
4.3.2 图像分类ResNet实战:眼疾识别——模型构建
这篇文章介绍了如何使用飞桨框架中的ResNet50模型进行眼疾识别的实战,通过5个epoch的训练,在验证集上达到了约96%的准确率,并提供了模型构建、训练、评估和预测的详细代码实现。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问