C#中的泛型

Posted 是小叶的呢.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中的泛型相关的知识,希望对你有一定的参考价值。

一、 泛型的概念
首先我们先来了解一下泛型的定义:泛型允许我们延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。(也就是说泛型是可以与任何数据类型一起工作的类或方法)模块内高内聚,模块间低耦合。
泛型的使用:当我们类/方法不需要关注调用者传递的是实体是什么(公共基类工具类),这个时候就可以使用泛型。
当然,在这里我们需要注意一下:集合中的项允许是object型的值,以此可以存放任意类型的值,无法确保存入集合中的值都是同一类型,而导致在处理时发生异常。
二、 可空类型
对于引用类型的变量来说,如果未对其赋值,在默认情况下是 Null 值,对于值类型的变量,如果未赋值,整型变量的默认值为 0。但通过 0 判断该变量是否赋值了是不太准确的。在 C# 语言中提供了一种泛型类型即可空类型 (System.Nullable))来解决值类型的变量在未赋值的情况下允许为 Null的情况。讲到可空类型让我们来看看下面这个实例:

输出结果如下:

接下来我们看看可空类型的常用方法:

三、 泛型方法
在 C# 语言中泛型方法是指通过泛型来约束方法中的参数类型,也可以理解为对数据类型设置了参数。如果没有泛型,每次方法中的参数类型都是固定的,不能随意更改。在使用泛型后,方法中的数据类型则有指定的泛型来约束,即可以根据提供的泛型来传递不同类型的参数。
泛型方法的定义:定义泛型方法需要在方法名和参数列表之间加上<>,并在其中使用 T 来代表参数类型这里我们需要注意一下:C#中泛型方法中只能使用object类具有的方法。让我们看看下面的举例:

输出如下图所示:

四、 泛型集合
C# 语言中泛型集合是泛型中最常见的应用,主要用于约束集合中存放的元素。由于在集合中能存放任意类型的值,在取值时经常会遇到数据类型转换异常的情况,因此推荐在定义集合时使用泛型集合。泛型集合中主要使用 List 和 Dictionary<K,V> 。
1、List类
List类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现IList 泛型接口。如下图所示:


输出结果如下:

2、Dictionary<K,V>
Dictionary<K,V>是 HashTable相对应的泛型集合,其存储数据的方式与哈希表相似,通过键/值来保存元素,并具有泛型的全部特征,编译时检查类型约束,读取时无须类型转换。 使用约束:
从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成 。任何键都必须是唯一的 。键不能为空引用null,若值为引用类型,则可以为空值 。
Key和Value可以是任何类型(string,int,class 等)。如下图所示:

输出结果如下:

以上是关于C#中的泛型的主要内容,如果未能解决你的问题,请参考以下文章

java中的泛型

java泛型泛型的内部原理:类型擦除以及类型擦除带来的问题

C#泛型详解

C#泛型详解

C#泛型详解

初见Python中的泛型