泛型将数据类型参数化,C#中的泛型类似于C++的模板。
使用泛型的优点:
当此类型需要操作值类型时,可以避免频繁的装箱和拆箱。
泛型的强类型检查可以在编译时发现错误。
在一定程度上让代码更为清晰,消除代码膨胀。
泛型类的示例请参考后续文章
常见的泛型方法的示例:
示例1:在数组中查找元素并返回其索引
经常使用泛型约束来限制T的数据类型,如:
where T : Demo, IDisposable, new() //要求T类型必须继承与Demo类,实现了IDisposable接口并实现了一个公共默认构造函数
where T: struct //要求T只能为值类型
where T: class //要求T只能为引用类型
并且可以使用default(T)将T类型的变量初始化为默认值
如上面的方法签名可以改写为public static int Find<T>(T[] array, T searchValue) where T:struct 则实现的是在值类型数组中的查找
示例2:在数组中查找元素的最大值并返回其索引
示例3:逆置数组
要注意的是,虽然Array类也提供了Reverse()方法完成此功能,但它只接受引用类型System.Array,也就是说,对于值类型,Array.Reverse会发生装箱操作(可以用.NET Reflector查看其源码来验证)。
在实际的应用中,泛型经常和集合类相关,比如用List<T>替代ArrayList,用Dictionary<Tkey, Tvalue>替代HashTable,
使用Dictionary的案例可以参考
找出字符串中出现次数最多的字符及出现次数
从字符串中删除指定的字符