正在阅读:由C++转向C#需要注意的变化(三)由C++转向C#需要注意的变化(三)

2004-11-18 15:52 出处:CSDN 作者:AustinLei 责任编辑:linjixiong


  staticvoidMain()
  {
  //创建一个新的列表并初始化
  ListBoxTestlbt=newListBoxTest("Hello","World");
  //添加一些新字符串
  lbt.Add("Who");
  lbt.Add("Is");
  lbt.Add("John");
  lbt.Add("Galt");
  stringsubst="Universe";
  lbt[1]=subst;
  //访问所有的字符串
  for(inti=0;i<lbt.GetNumEntries();i++)
  {
  Console.WriteLine("lbt[{0}]:{1}",i,lbt[i]);
  }
  }
  }

  Enumerator必须实现IEnumerator方法,这可以直接通过一个容器类或一个独立的类实现,后一种方法经常被选用,因为它可以将这一任务封装在Enumerator类中,而不会使容器类显得很混乱。我们将在上面代码中的ListBoxTest中添加Enumerator类,由于Enumerator类是针对我们的容器类的(因为ListBoxEnumerator必须清楚ListBoxTest的许多情况),我们将使它在ListBoxTest中成为不公开的。在本例中,ListBoxTest被定义来完成IEnumerable界面,IEnumerable界面必须返回一个Enumerator。


  publicIEnumeratorGetEnumerator()
  {
  return(IEnumerator)newListBoxEnumerator(this);
  }

  注意,方法将当前的ListBoxTest对象(this)传递给Enumerator,这将使Enumerator枚举这一指定的ListBoxTest对象中的元素。

  实现这一类的Enumerator在这里被实现为ListBoxEnumerator,它在ListBoxTest中被定义成一个私有类,这一工作是相当简单的。

  被枚举的ListBoxTest作为一个参数被传递给constructor,ListBoxTest被赋给变量myLBT,构造器还会将成员变量index设置为-1,表明对象的枚举还没有开始。


  publicListBoxEnumerator(ListBoxTesttheLB)
  {
  myLBT=theLB;
  index=-1;
  }

  MoveNext方法对index进行加1的操作,然后确保没有超过枚举的对象的边界。如果超过边界了,就会返回false值,否则返回true值。


  publicboolMoveNext()
  {
  index++;
  if(index>=myLBT.myStrings.Length)
  returnfalse;
  else
  returntrue;
  }

  Reset的作用仅仅是将index的值设置为-1。

  Current返回最近添加的字符串,这是一个任意的设定,在其他类中,Current可以有设计人员确定的意义。无论是如何设计的,每个进行枚举的方法必须能够返回当前的成员。


  publicobjectCurrent
  {
  get
  {
  return(myLBT[index]);
  }
  }


察看评论详细内容 我要发表评论
作者笔名 简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品