泛型解决方案
C# 通过泛型避免强制类型转换,增强类型安全性,减少装箱量.泛型类和方法接受类型参数.它们指定了要操作的对象的类型
如下所示:
class Queue<T>
{
...
}
T就是类型参数,作为占位符使用,会在编译时被真正的类型取代.写代码实例化泛型Queue时,需要指定用于取代T的类型,在类中定义字段和方法时,也可以用同样的占位符指定这些项的类型.
类型参数不一定是简单类或值类型。比如,可以创建由整数队列构成的队列:
泛型类还可以指定多个类型的参数,比如Dictionary
…
…
对比泛型类和常规类
每次为泛型类指定类型参数时,实际都会造成编译器生成一个全新的类.它"恰好"具有泛型类定义的功能.可以想象泛型类定义了一个模板,编译器根据实际情况用该模板生成新的、有具体类型的类.
…
…
泛型和约束
有时候要确保泛型使用的类型参数是提供了特定方法的类型,这时可用约束来规定该条件.
比如:
class Queue<T> where T: IPrintable
{
}
这样用于替换T的类型必须实现了IPrintable接口,如果没有则会造成编译错误.
下面是一个使用泛型的简单二叉树类
public class Tree<TItem> where TItem: IComparable<TItem>
{
public TItem NodeData {
get; set; }
public Tree<TItem> LeftTree {
get; set; }
public Tree<TItem> RightTree {
get; set; }
public Tree(TItem nodeValue) //构造器名称不能包含类型参数,它名为Tree
{
this.NodeData = nodeValue;
this.LeftTree = null;
this.RightTree = null;
}
public void Insert(TItem newItem)
{
TItem currentNodeValue = this.NodeData;
if(currentNodeValue.CompareTo(newItem