为了提高应用程序的效率和可用性,C#2.0引入了泛型概念.C#泛型有些类似C++的摸版。
(一)特点
泛型具有以下功能特点:
一、使用泛型可以定义类型安全的数据结构,而无需使用实际的数据类型。
二、通过使用泛型,能够将数据类型参数化,以此完成代码重用的目标。这一参数可以应用在类、方法、结构、接口、委托等设计中。
三、泛型可提供编译期间的类型检查,减少不必要的显式类型转换,减少不必要的装箱操作,从而提高应用程序的运行效率。
(二)泛型集合
泛型常用于集合应用中。在.NET2.0框架的类库中,提供了一个新的命名空间System.Collections.Generic,其中包含了一些新的基于泛型的容器类,例如:System.Collections.Generic.Stack
、System.Collections.Generic.Dictionary、System.Collections.Generic.List、System.Collections.Generic.Queue等,这些类库可以在集合中实现泛型。
下面是一个Stack类具体的应用代码:
//
实列化Stack类
System.Collections.Generic.Stack
<
string
>
stringStack
=
new
System.Collections.Generic.Stack
<
string
>
();
//
添加数据
stringStack.Push(
"
常德
"
);
stringStack.Push(
"
北京
"
);
stringStack.Push(
"
武汉
"
);
//
转换为数组
Array stringArray;
stringArray
=
stringStack.ToArray();
//
显示数组
foreach
(
string
s
in
stringArray)
{
Response.Write(s);
}
以上代码中,首先实例化了一个Stack类的stringStack,并且设置其参数是string,这说明该类所实现堆栈的数据类型是string。然后,通过Stack类的Push方法压入3个字符串数据,并且使用ToArray方法,将堆栈中的数据转换到一个数组stringArray中(此时,stringArray是一个字符串数组)。最后,使用Response.Write( )方法将数组中的数据显示出来(逆序显示,这是堆栈的特性)。
另外,如果要求堆栈中存储的是int类型,那么可以使用同样的方法,只需要修改很少的内容即可实现。
(三)泛型方法
在某些情况下,一个类型参数并不为整个类所必需,而只用于一个特定的方法中。这个情况竟法发上在建立一个需要泛型作为参数的方法时。
一个泛型方法有一个或多个类型参数,并且在方法名后面由“<”和“>”限定符指定。这个类型参数可以用在参数利表、返回值和方法体中。
public
void
StackPush
<
T
>
(Stack
<
T
>
stack,
params
T[] values)
{
foreach (T value in values)
{
stack.Push(value);
}
}
使用这个方法,可以将多个元素压入任何Stack<T>中。当调用一个泛型方法时,要在函数的调用中将类型参数放入尖括号中。示例代码如下:
Stack
<
int
>
stack
=
new
Stack
<
int
>
();
StackPush
<
int
>
(stack,
1
,
2
,
3
,
4
);
在上面的例子中,由于第一个正式参数类型是Stack<int>,并且后面的参数类型都是int,编译器可以推断类型参数一定是int,因此在调用泛型的StackPush方法时可以不用提供类型参数。
Stack
<
int
>
stack
=
new
Stack
<
int
>
();
StackPush(stack,
1
,
2
,
3
,
4
);