C#复习之泛型

1.什么是泛型?
--首先看下面的例子:
Class MyIntClass
{
int a=1;
public void Push(int x)
{
....
}
public int Pop()
{
.....
}
}
上面的例子声明了一个MyIntClass类,它实现了一个int类型的栈,它允许将int压入栈,也可弹出。如果我们现在需要一个float的类型实现相同的功能,那么我们需要将以上代码复制粘贴,将类名改变并且需要将所有的int类型的地方换成float类型,这样需要程序另外的申请内存来存储float类型的新的类,消耗了内存空间
为了解决以上的不便,C#2.0后引进了泛型,他提供了一种更加精准的实现以上代码的方式。泛型允许我们用不同的类型进行实例化,在声明类的时候只是做了一个类的占位符的作用,而在实例化是才指明具体的类。

2.泛型类
--声明泛型类:
class MyStack<T>
{
//
}
所以第一个例子用泛型的方式声明就是如下:
class MyIntClass<T>
{
int a=1;
public void Push(T x)
{
//方法体
}
public T Pop()
{
//方法体
}
}
当泛型希望多个提供多个实体类型是,在尖括号中用逗号隔开即可。例:<T1,T2>
3.约束:由于泛型类在声明的时候不知道要提供的实体的类是什么类型,由于所有的类型都继承自object类,所以泛型只能实现ToString,Equals和GetType这些成员。如果访问之外的成员将会出现错误。例:
Class MyClass<T1,T2>
{
public bool GetMax()
{
return T1<T2;//此时由于不是所有的类型都可以执行"<"操作,所有此处会报错
}
}
--如果泛型想要访问其他的成员就必须给该泛型加上类型的约束,让编译器知道参数可以接受的类型这就叫做约束
--约束用Where来列出。例:
Class MyClass<T1,T2>
where T1:int
where T2:int
注:多个参数的约束用需要用任何的分隔符
约束必须出现在尖括号的后面
约束的排列顺序可以任意
4.泛型结构:
--泛型结构和泛型类一样可以有类型参数和约束,泛型结构的规则和条件个泛型类是一样的。
struct PrintData<T>
{
public PrintData(T data)
{
return data;
}
}
Class Prpgram
{
var intData=new PrintData<int>(10);
var stringData=new PrintData<string>("Hello Word!");
Console.WriteLine(intData);
Console.WriteLine(stringData);
}
结果为:10
Hello Word!
5.泛型接口的声明和非泛型接口的声明基本一样,只是在尖括号中填入类型参数,泛型类型在使用时跟非泛型接口一样













posted @ 2012-11-21 23:54  馋嘴的毛毛  阅读(166)  评论(0编辑  收藏  举报