C#语法(1):泛型

C#泛型(C# Generics)

  1. 概述
  2. 什么是泛型
  3. 如何使用泛型
  4. 泛型约束

C#泛型概述

先看一个通用的数据结构示例:

结构类:

结构类:

public class stack

{

   object[] m_Items;

  public void Push(object item)

{……}

public object Pop()

{……}

}

基于object解决方案存在的问题

-性能问题:

  • 值类型Push时要装箱处理,Pop时要拆箱处理,造成更多的垃圾碎片,增加垃圾收集的负担
  • 引用类型也有强制转换的开销

-类型安全问题(更为严重)

  • 编译时任何类型都可以转换成object,无法保证运行时的类型安全

解决性能和类型安全的方法:

-编写特定类型的数据结构。

基于编写特定类型的数据结构的问题:

-影响工作效率。

-代码冗余,重用率低。

-一个数据结构变更,要将所有类型的数据结构做相应的修改。

-为了提供不可预知的数据类型的支持,还是要提供object类型接口,类型安全的问题又会出现。

为了解决上面所遇到的问题,现在引入泛型的概念。

什么是泛型?

  • 通过泛型可以定义类型安全类,而不损害类型安全、性能工作效率
  • 可以使用任何类型来声明和实例化。
  • 声明和实例化时都必须用一个特定的类型来代替一般类型T
  • 通用数据结构采用泛型实现。

编程模型的有点在于,内部算法和数据操作保持不变,而实际数据类型可以在使用时指定。

泛型是如何实现的?

  • 在.net 2.0中,泛型在IL(中间语言)和CLR本身中具有本机支持。
  • 编译泛型类时,就像编译其他类一样,泛型仅保留一个占位符。
  • 而用特定类型实例化泛型代码时,编译时会将泛型替换为实例化的特定类型。

泛型的好处

  • 一次性的开发、测试和部署代码,通过任何类型()来重用它
  • 编译器支持和类型安全
  • 不会强行对值类型进行装箱和拆箱操作,或者对引用类型进行上下强制类型转换,所以性能得到显著提高

                -值类型,性能通常会提高200%

               -引用类型,在访问类型时,可以预期性能最多提高100%(当然,整个应用程序的性能可能会提高,也    可能不会提高)

应用泛型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值