如何在C#中创建Collection类
如何在C#中创建Collection类
作者:黄海
介绍:
Collection类在.NET编程中频繁的使用着,比如说:ArrayList,NameValueCollection,HashTable都是可收集的类。其中我们看到一个很特殊的事情是它们都能在其中使用象 foreach(...)这样的循环。而且VC#和VB.NET都可以使用这样的循环。那么我们自定义的类如何实现这个功能呢?那就要求我们自定义的类中使用接口(interfaces)。要这篇文章中我们要看到如何使用C#对可收集类的编码。
例子:
在这个例子中,我们假设我们需要一种数据结构,在这个结构当中我们要放入一些图书的标题列表。我们用这个结构要实现加入、移出。我们要建立一个可收集的类,不妨把它叫作Books,用它来存储这些标题列表。在开始我们创建可收集类之前,让我们看一下Books类的最基本的样子:
namespace CollectionClass
{
class Books
{
private ArrayList m_booktitles;
public Books()
{
m_booktitles=new ArrayList();
}
public void Add(string booktitle)
{
m_booktitles.Add(booktitle);
}
public void Remove(string booktitle)
{
m_booktitles.Remove(booktitle);
}
}
}
正如我们看到的,我们在ArrayList中提供了一个最简单的方法去加入和移出数据,然而我们不能在这样的结构当中使用foreach的循环,为了能做到这一点,我们还得要做到:
1、 声明Books类是一个 System.Collections.IEnumerable 接口(interface)
2、创建一个类,用于实现System.Collections.IEnumerator 的接口(interface)
IEnumerable Interface
IEnumerable interface仅仅有一个要实现的方法:GetEnumerator(),它会返回一个System.Collections.IEnumerable 的类,下边的代码可以帮我们理解这个过程:
class Books:IEnumerable
{
public ArrayList m_booktitles;
public Books()
{
m_booktitles=new ArrayList();
}
public void Add(string booktitle)
{
m_booktitles.Add(booktitle);
}
public void Remove(string booktitle)
{
m_booktitles.Remove(booktitle);
}
public IEnumerator GetEnumerator()
{
return new BooksEnumerator(this);
}
}
这个GetEnumerator()方法返回了一个BooksEnumerator类的实例,我们在下面要继续讨论它。
IEnumerator Interface
IEnumerator Interface接口存在于System.Collection这个命名空间中,这个接口我们要实现如下的方法和属性:
public bool MoveNext()
{
}
public void Reset()
{
}
public object Current
{
}
这个MoveNext方法告诉我们当用户想要向前滚动时我们要作什么,Reset会重新指向开始时的数据,Current 会返回当前的值.
BooksEnumerator Class
下面是一个完整的代码,展示了如何实现IEnumerator 接口:
class BooksEnumerator : IEnumerator
{
private int position = -1;
private Books books;
public BooksEnumerator(Books books)
{
this.books = books;
}
public bool MoveNext()
{
if (position < books.m_booktitles.Count - 1)
{
position++;
return true;
}
else
{
return false;
}
}
public void Reset()
{
position = -1;
}
public object Current
{
get
{
return books.m_booktitles[position];
}
}
}
在上面的程序中,我们将我们定义的Books类放入到这个新类中来。这个类包含一个指针,指向当前的位置。
开始使用我们的Collection类!
我们可以开始使用我们的类了:
class Class1
{
static void Main(string[] args)
{
Books b=new Books();
b.Add("vb.net");
b.Add("c#");
b.Add("asp.net");
foreach(string s in b)
{
Console.WriteLine(s);
}
}
}
联系电话:13538231990 qq:10402852 Email:huanghai@bdfsz.com.cn
联系地址:广东省深圳市南山区星海名城前海路北大附中南山分校信息中心 黄海收 邮编 :518052
浙公网安备 33010602011771号