现在我想说的是C#中的容器.这是一个非常重要的话题,因为不管你写什么样的程序,你都不能不与容器打交道.什么是容器呢(倒!).容器就是可以容纳东西的东西(再倒!),在C#和JAVA这种面向对象的编程语言中,容器就被称为可以容纳对象的东东,不是说"一切都是对象吗?"以前,我一个搞C++的程序员朋友告诉我,JAVA中的容器太好用了,比C++好用多了.而作为JAVA的后来者的C#毫无疑问,它的容器功能肯定也是很强大的.
foreach语句是遍历容器的元素的最简单的方法.我们可以用System.Collections.IEnumerator类和System.Collections.IEnumerable接口来使用C#中的容器,下面有一个例子,功能是字符串分割器.
000: // CollectionClasses\tokens.cs
001: using System;
002: using System.Collections;
003:
004: public class Tokens : IEnumerable
005: {
006: private string[] elements;
007:
008: Tokens(string source, char[] delimiters)
009: {
010:
elements = source.Split(delimiters);
011: }
012:
013: //引用IEnumerable接口014:
015: public IEnumerator GetEnumerator()
016: {
017:
return new TokenEnumerator(this);
018: }
019:
020:
021:
022: private class TokenEnumerator : IEnumerator
023: {
024:
private int position = -1;
025:
private Tokens t;
026:
027:
public TokenEnumerator(Tokens t)
028:
{
029:
this.t = t;
030:
}
031:
032:
public bool MoveNext()
033:
{
034:
if (position < t.elements.Length - 1)
035:
{
036:
position++;
037:
return true;
038:
}
039:
else
040:
{
041:
return false;
042:
}
043:
}
044:
045:
public void Reset()
046:
{
047:
position = -1;
048:
}
049:
050:
public object Current
051:
{
052:
get
053:
{
054:
return t.elements[position];
055:
}
056:
}
057: }
058:
059: // 测试060:
061: static void Main()
062: {
063:
Tokens f = new Tokens("This is a well-done program.", new char[] {' ','-'});
064:
foreach (string item in f)
065:
{
066:
Console.WriteLine(item);
067:
}
068: }
069: }
这个例子的输出是:
This
is
a
well
done
program.
好了,这一节就说到这了.现在环境不太好,旁边一大帮同学在看VCD,不好搞.