泛型<T>

泛型
C#语言和CLR(公共语言运行时)在2.0版本中加入了泛型。泛型是将类型参数的概念引入 .net Framework,这样一来就可以设计具有以下特征的类和方法。例如使用泛型类型参数T,可以编写其他客户端代码能够使用的单个类,而不会产生运行时转换或装箱操作的成本风险。
泛型的概述
1.使用泛型类型可以最大限度的重用代码,保护类型安全一级提高性能。
2.泛型是最常见的用途是创建集合类。
3…NET Framework类库在System.Collections.Generic命名空间中包含几个新的泛型集合类.应尽可能使用,这些类来代替某些类,如System.Collections命名空间的ArrayList。
4.可以创建自己的泛型接口,泛型类,泛型事件和委托泛型。
5.可以对泛型类进行约束以访问特定的数据类型的方法。
6.在泛型数据类型中所用的类型信息可以在运行时通过使用反射来获取。
泛型委托
委托可以定义它自己的泛型参数。引用泛型委托的代码可以指定类型的参数以创建封闭式构造类型,就像实例化泛型类或者调用泛型方法一样,如下所示
public delegate void Del(T item);
public static void Notify(int i) { }

Del<int> m1 = new Del<int>(Notify);
使用委托的代码必须指定包含类 的类型参数,如下所示
private static void DoWork(float[] items) { }

public static void TestStack()
{
    Stack<float> s = new Stack<float>();
    Stack<float>.StackDelegate d = DoWork;
}
泛型委托特别有用,因为发件人参数可以为强类型,无需在它和Object之间强制转换。
delegate void StackEventHandler<T, U>(T sender, U eventArgs);

class Stack<T>
{
		public class StackEventArgs:System.EventArgs { }
		public event StackEventHandler<Stack<T>,StackEventArgs> stackEvent;

		protected virtual void OnStackChanged(StackEventArgs a)
		{
    		stackEvent(this, a);
	}

}

class SampleClass
{
		public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { }
}

public static void Test()
{
		Stack<double> s = new Stack<double>();
		SampleClass o = new SampleClass();
		s.stackEvent += o.HandleStackChange;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值