黑马程序员_泛型

------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------

泛型:浅显的、不严谨的、不完整的说就是用< T >占一个位置,然后你可以用你想要的类型去替换这个T

泛型是用于处理算法、数据结构的一种编程方法。泛型通常用在集合和在集合上运行的方法中。泛型的目标是采用广泛适用和可交互性的形式来表示算法和数据结构,以使它们能够直接用于软件构造。泛型类、结构、接口、委托和方法可以根据它们存储和操作的数据的类型来进行参数化。

CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码,因为引用类型都是使用4个字节存储(32位系统),为类型参数为“值类型”的泛型类型分别单独产生一份独立的代码。

泛型主要有以下几个优点:泛型能在编译是提供强大的类型检查,减少数据类型之间的显示转换、装箱操作和运行时的类型检查。泛型类和泛型方法同时具备可重用性、类型安全和效率高等特性。

有时我们需要写一些通用的类或方法等,能够处理不同类型的数据,一般可以使用object类型进行定义,但是此时就要进行装箱和拆箱的操作,虽然很容易使用,但是会损失较大的性能,特别是遍历的时候,而且拆箱操作是不安全的,容易出现隐藏的错误。

举例:

首先使用装箱、拆箱操作

var list = new ArrayList();

list.Add(1);//装箱操作,把int类型的1转为为var类型

list.Add(2);

int i1 = (int)list[0];//拆箱操作,把var类型强制转换为int类型

foreach (int i2 in list)//拆箱操作,效率低

{

Console.WriteLine(i2);

}

使用泛型

var list = new List<int>();

list.Add(1);//不需要装箱,list表的泛型类型为int

list.Add(2);

int i1 = list[0];//不需要拆箱,效率高

foreach (int i2 in list)

{

Console.WriteLine(i2);

}

通常先定义泛型,然后通过类型实例化来使用泛型。

定义格式:

访问修饰符 ][ 返回类型 泛型名称 类型参数列表 >

1.创建泛型类

public class Stack< T >

{

T data[ MaxSize ];

int top;

}

2.创建泛型方法

public void swap< T >( ref  T  a, ref  T  b)

{

T tmp = a;

a = b;

b = tmp;

}

3.创建泛型接口

public interface IDbserver< T >

{

void swap(ref  T  a, ref  T  b);

}


你可能感兴趣的:(.net,类,泛型,C#,黑马程序员)