泛型的使用

类型参数T

泛型的类型参数T可以看作是一个占位符,它不是一种类型,它仅代表了某种可能的类型。类型参数T可以在使用时用任何类型来代替。

类型参数T的命名准则如下:

使用描述性名称命名泛型类型参数,除非单个字母名称完全可以让人了解它表示的含义,而描述性名称不会有更多的意义。

public interface ISessionChannel<TSession>

{

TSession session{ get;}

}

 

泛型接口

Interface 接口名 <T>

{

接口体

}

在实例化泛型时也可以使用约束对类型参数的类型种类施加限制,约束是使用where上下文关键字指定的。下面列出了6种类型的约束:

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

b).T:类——类型参数必须是引用类型。这一点也使用于任何类、接口、委托或数组类型。

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

d).T:<基类名>——类型参数必须是指定的基类或派生自指定的基类。

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

f).T:U——为T提供的类型参数必须是为U提供的参数或派生自为U提供的参数。这称为裸类型约束。

// 创建一个泛型接口

public interface IGenericInteface<T>

{

T CreateInstance();

}

// 实现上面泛型接口的泛型类

// 派生约束 where T:TI(T要继承自TI)

// 构造函数约束where T:new()(T可以实例化)

public class Factory<T, TI>: IGenericInteface<TI> where T:TI,new()

{

public TI CreateInstance()

{

return new T();

}

}

 

泛型方法

修饰符 void 方法名<类型参数 T>

{

}

注:泛型方法可以使用多类型参数进行重载。

Public static int Find<T>(T[] items, T item)

{}

Int I = Finer.Find<int>(new int[]{1,2,3,4,5,6}, 6);

 

 

《C#从入门到精通》读后总结

 

posted @ 2016-03-27 11:30  我不是大佬  阅读(186)  评论(0编辑  收藏  举报