C#中泛型的使用笔记

1.传统方法处理不同数据类型的相同操作

在没有应用泛型之前,我们处理不同类型的相同操作会遇到一些问题比如:

(1)值类型的数据和string等类型的代码会出现大量的重复,这样我们在修改维护代码的时候会很耗时间

(2)如果使用object集合类型会频繁地进行拆箱装箱操作影响性能,影响执行效率。

(3)Object会导致大量的类型转换操作,很容易出现错误。

2.引入泛型

泛型允许编写一个可以与任何数据类型一起工作的类或方法,可以通过数据类型的替代参数编写类或方法的规范。比如在项目中我们封装一些公共组件,我们不需要关注我们的类或者方法传递的实体是什么,这时候就可以使用泛型。

(1)这里写一个简单的Demo理解泛型

得到编译结果为:

这里通过数据类型的替代参数编写类或方法的规范当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。

 

2在声明泛型方法/泛型类的时候,可以给泛型加上一定的约束来满足我们特定的一些条件。

 

比如:

 T:结构(类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型)

 T:类 (类型参数必须是引用类型,包括任何类、接口、委托或数组类型)

 Tnew() (类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时new() 约束必须最后指定)

 T<基类名> 类型参数必须是指定的基类或派生自指定的基类

 T<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

 

3通过类型参数定义泛型委托

运行结果为:

3.小结

对值类型使用非泛型集合类,在把值类型转换为引用类型,和把引用类型转换为值类型时,需要进行装箱和拆箱操作。装箱和拆箱的操作很容易实现,但是性能损失较大。假如使用泛型,就可以避免装箱和拆箱操作。

 

posted @ 2018-12-25 07:51  景康  阅读(621)  评论(0编辑  收藏  举报