技术开发 频道

基于C# 2.0泛型构造一个二叉树类

【IT168技术文档】
一、 泛型简介

泛型(Generic)是C# 2.0新增的概念之一,其宗旨是避免进行强制类型转换的需求,提高类型安全性,减少需要的装箱量并且让程序员更轻松地创建泛型化的类和方法。泛型类和方法接受所谓的“类型参数”,由它们确定要操作的对象的类型。

二、 问题的提出
.NET框架2.0通过System.Collections.Generic命名空间提供了许多集合类和接口的泛型版本。
.NET框架类库已经包含了大量现成的泛型类。当然,用户也可以根据自己的需要定制泛型类。不知何原因,微软恰好在System.Collections.Generic命名空间中遗漏了二叉树类。须知,二叉树是一种非常有用的数据结构,可用它实现大量的操作,其中包括以极快的速度来排序和搜索数据。

在本文中,我们将使用.NET 2.0泛型概念构造一棵基本的二叉树,使其能容纳多种类型的数据。

三、 使用泛型构造二叉树类实例
由于二叉树类在许多程序中都能用到;所以,最好我们把它做成一个类库以便重用。然后,可以到处重用这个类,而无需复制源代码并重新编译它。

【提示】在.NET中,类库是一系列已经编译的类的集合,所有这些类都存储在一个程序集中。程序集是一个通常采用.dll扩展名的文件。其它项目和应用程序可以添加对程序集的一个引用,然后使用using语句,将它的命名空间带入自己的范围中,从而利用类库中的内容。

启动Visual Studio 2005。选用“类库”模板来创建一个新的Visual C#项目,并将项目命名为BinaryTree。然后,在解决方案资源管理器中,将文件名Class1.cs改变为Tree.cs。

接下来,对Class1类的定义作如下修改,最后代码如下所示:
namespace BinaryTree { public class Tree<T> where T : IComparable<T> { private T data; private Tree<T> left; private Tree<T> right; //……
【提示】泛型和约束常常是联系在一起使用的。通过约束,可以将一个泛型类的类型参数限制成实现了一系列特定接口的类型(所以它们能够提供由那些接口定义的方法)。
在本例中,我们修改Tree<T>类的定义,指定类型参数T必须是实现了泛型IComparable<T>接口的一个类型。

【提示】如果我们需要创建一个类,要求它能够根据某种排序方式对值进行比较,那就要实现IComparable接口。此接口包含一个CompareTo方法,由它来获得单个参数,并返回一个整数以指出比较结果。

0
相关文章