在C#中创建自己的集合类
集合类在.NET应用得很广泛,比如 ArrayList类,HashTable类等。这些集合类特有的一个特征就是可以用 foreach 循环遍历集合中的每一个元素。通过实现某个特定的接口,我们也可以创建自己的集合类。下面用C#说明。
在我们的例子中,将创建一个 Books类,用来存储一些书名的集合。我们可以添加、移除或遍历集合中的元素(即书名)。为了达到利用 foreach循环遍历集合的目的,我们必须实现下面两点:
1。在 Books类中实现 System.Collections.IEnumerable接口
2。创建一个实现 System.Collections.IEnumerator接口的类
IEnumerable接口
IEnumerable接口只有一个方法:GetEnumerator(),该方法返回一个实现了IEnumerator的类。下面就是实现了IEnumerable接口的Books类的代码:
namespace CollectionClassDemo
{
public class Books:IEnumerable
{
public ArrayList bookTitles; //这里一定要用public,否则会出错
public Books()
{
bookTitles = new ArrayList();
}
public void Add(string bookTitle)
{
bookTitles.Add(bookTitle);
}
public void Remove(string bookTitle)
{
bookTitles.Remove(bookTitle);
}
public IEnumerator GetEnumerator()
{
return new BooksEnumerator(this);
}
}
}
public bool MoveNext()
{
}
public void Reset()
{
}
public object Current
{
}
namespace CollectionClassDemo
{
public class BooksEnumerator:IEnumerator
{
private int position = -1;
private Books books;
public BooksEnumerator(Books books)
{
this.books=books;
}
public bool MoveNext()
{
if(position < books.bookTitles.Count-1)
{
position++;
return true;
}
else
{
return false;
}
}
public void Reset()
{
position = -1;
}
public object Current
{
get
{
return books.bookTitles[position];
}
}
}
}
namespace CollectionClassDemo
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Books b = new Books();
b.Add("ASP.NET");
b.Add("C#");
b.Add("Visual C++");
b.Remove("C#");
foreach(string i in b)
{
Console.WriteLine(i);
}
Console.Read();
}
}
}
在我们的例子中,将创建一个 Books类,用来存储一些书名的集合。我们可以添加、移除或遍历集合中的元素(即书名)。为了达到利用 foreach循环遍历集合的目的,我们必须实现下面两点:
1。在 Books类中实现 System.Collections.IEnumerable接口
2。创建一个实现 System.Collections.IEnumerator接口的类
IEnumerable接口
IEnumerable接口只有一个方法:GetEnumerator(),该方法返回一个实现了IEnumerator的类。下面就是实现了IEnumerable接口的Books类的代码:
IEnumerator接口
IEnumerator接口位于System.Collections名称空间下。我们必须实现该接口如下的方法和属性定义:
其中MoveNext()使游标移向下一个元素,直到最后一个元素。Reset()初始化集合,可以在这里设游标的值为-1。Current属性取回当前集合的元素。
下面就是实现了IEnumerator接口的类BooksEnumerator的代码:
通过传递一个Books对象给BooksEnumerator类的构造函数,BooksEnumerator类就维护一个指针指向集合的当前位置。
下面我们就可以使用这个Books集合类了:
Reference:http://www.dotnetbips.com/EEB3F756-B4B5-4863-8B6F-18D2EC6D37CE.aspx?articleid=65

浙公网安备 33010602011771号