泛型

简介: 泛型

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

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

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

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

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

泛型函数的基本语法:

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

泛型的特性

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

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

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

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

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

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


泛型委托

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

delegate T NumberChanger<T>(T n);

泛型的作用

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

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

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

目录
相关文章
|
数据采集 数据处理 计算机视觉
4.3 图像分类ResNet实战:眼疾识别
这篇文章介绍了使用ResNet网络进行眼疾识别的实战流程,涵盖了计算机视觉任务研发的全流程,包括数据处理、数据预处理、数据读取器的定义,以及如何利用iChallenge-PM数据集进行模型训练和评估。
|
8月前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
8月前
|
Ubuntu Linux 测试技术
Python 虚拟环境配置
本文总结了 Python 开发中的环境配置、常用操作和常见错误处理。重点介绍了如何使用 `virtualenv` 搭建虚拟环境,解决依赖冲突问题,并保持系统环境的干净。同时,详细说明了依赖库的安装与管理方法,包括使用 `pip install` 安装依赖、生成和使用 `requirements.txt` 文件,以及查看 Python 文档和修改环境变量等实用技巧。
617 60
|
8月前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
|
8月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
314 2
|
6月前
|
数据采集 安全 API
使用开源项目和IP代理快速获取谷歌学术论文资源并通过大模型提炼信息
使用开源项目和IP代理快速获取谷歌学术论文资源并通过大模型提炼信息
|
API 异构计算
4.3.2 图像分类ResNet实战:眼疾识别——模型构建
这篇文章介绍了如何使用飞桨框架中的ResNet50模型进行眼疾识别的实战,通过5个epoch的训练,在验证集上达到了约96%的准确率,并提供了模型构建、训练、评估和预测的详细代码实现。
|
数据采集 XML 机器学习/深度学习
5.3 目标检测YOLOv3实战:叶病虫害检测
这篇文章介绍了使用YOLOv3模型进行叶病虫害检测的实战过程,包括数据预处理、模型构建、训练和评估等关键步骤。
|
9月前
|
存储 算法 Java
《Java 在 3D 视觉与重建领域:开启无限可能之旅》
在科技飞速发展的今天,3D视觉和重建技术正变革众多行业。Java作为一种广泛应用的编程语言,在3D视觉与重建中展现出巨大潜力。本文探讨Java在图像采集、3D数据处理及重建算法中的应用,分析其在VR/AR、自动驾驶、智能制造等领域的应用场景,并展望未来挑战与机遇。Java凭借其丰富的生态系统和强大的开发能力,有望在3D视觉领域发挥重要作用,推动技术创新与发展。
180 8
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化

热门文章

最新文章