.net系统自学笔记——泛型

泛型

1.概述

2.创建泛型类

3.泛型类的特点

4.泛型接口

5.泛型结构

6.泛型方法

 

一、概述

泛型是CLR定义的,所以支持.net的语言就支持泛型。

优缺点:

1.性能

2.类型安全

3.二制代码重用

4.代码的扩展

5.命名约定

 

(一)、性能

名词:装箱,拆箱。(性能损失)

System.Collections.Generic名称空间中的List<T>类,对比ArrayList

 

(二)类型安全

(三)二进制代码的重用

(四)代码的扩展

(五)命名约定
命名规则:

●   泛型类型的 名称用字母 T作 为前缀。

●   如果没有特殊的要求,泛 型类型允许用任意类替代,且只使 用 了 一个泛型类型,就可以 用字符 T作 为泛型类型的 名称。

●   如果泛型类型有特定的 要求(例 如,它必须实现一个接 口 或派生基类),或者使用了 两个或多个泛型类型,就应给泛型类型使用描述性的名称

 

二、创建泛型类:即类似List<T>的类。需要创建的是“List”

泛型类 的定义与一般类类似 ,只 是要使用泛型类型声明。

之后 ,泛型类型就可 以在类 中用作一个字段成员,或者方法 的参数类型 。

 

三、泛型类的功能:

在创建泛型类时,还需要一些其他C#关键字,例如,不能把null赋予泛型类型。此时,可以使用default关键字。如果泛型类型不需要object类的功能 ,便需要调用泛型类上的某些特定方法,就可以定义约束。

包括:默认值,约束,继承,静态成员。

1.默认值:default

2.约束:where:

 

只能为默认构造函数定义构造函数约束,不能为其他构造函数定义构造函数约束。

使用泛型类型还可以合并多个约束

3.继承:

泛型类型可以实现泛型接口,也可以派生自一个类。泛型类可以派生自泛型基类,要求是必须重复接口的泛型类型,或者必须指定基类的类型。于是,派生类可以 是泛型类或非泛型类。 例如,可 以 定义一个抽象的 泛型基类,它在派生类中用一个具体的 类型实现。 这允许对特定类型执行特殊的 操作。

4.静态成员:泛型类的静态成员需要特别关注。泛型类的静态成员只能在类的一个实例中共享。

 

四、泛型接口

 

使用泛型可以定义接口,在接口中定义的方法可以带泛型参数。.net为不同的情况提供了许多接口。同一个接口常常存在比较老的非泛型版本。

1.协变和抗变

在.net之 前,泛 型接口 是不变的。 .NET4通过协变和抗变为泛型接口和泛型委托添加了一个 重要的扩展。 协变和抗变指对参数和返回 值的 类型进行转换。

2.泛型接口的协变:如果泛型类型用out关键字标,泛型接口就是协变的。这也意味着返回类型只能是T。

3.泛型接口的抗变:如果泛型类型用in关键字标注,泛型接口就是抗变的。这样,接口只能把泛型类型 T用作其方法的 输入.

 

五、泛型结构:

与类相似,结构也可以是泛型的,类似于泛型类,只是没有继承特性。

可空类型

泛型结构示例:Nullable<T>,int?  a=null;(正常情况下值类型是不允许为null的)

非可空类型可以 转换为可空类型。 从非可空类型转换为可空 类型时,在 不需要强制类型转换的地方可以 进行隐式转换。但从可空类型转换为非可空 类型可能会失败。 如果可空类型的 值是 null,并 且把null值赋予非可空类型,就会抛出InvalidOperationException类型的异常。如果不进行显式类型转换,还 可以 使 用合并 运算符(coalescing operator)从 可空类型转换为非可空类型。 合并运算符的 语法是"??", 为转换定义了 一个默认值,以 防可空类型的值是 null;

 

六、泛型方法:

除了定义泛型类之外,还可以定义泛型方法,在泛型方法中,泛型类型用方法声明来定义 。泛型方法可以在非泛型类中定义。

带约束的泛型方法

带委托的泛型方法

泛型方法规范

 

 

 

————未深入理解,待续

posted @ 2013-07-01 15:59  @妞儿  阅读(244)  评论(0编辑  收藏  举报