C# 为自定义类 实现IEnumerator 和 IEnumerable 接口

# 为自定义类 实现IEnumerator 和 IEnumerable 接口

// tokens2.cs

using System;

using System.Collections;

 

public class Tokens: IEnumerable

{

   private string[] elements;

 

   Tokens(string source, char[] delimiters)

   {

      elements = source.Split(delimiters);

   }

   // IEnumerable Interface Implementation:

   public TokenEnumerator GetEnumerator() // non-IEnumerable version

   {

       Console.WriteLine("this is token class");

      return new TokenEnumerator(this);

   }

   IEnumerator IEnumerable.GetEnumerator() // IEnumerable version

   {

       Console.WriteLine("this is IEnumerable class");

      return (IEnumerator) new TokenEnumerator(this);

   }

   // Inner class implements IEnumerator interface:

   public class TokenEnumerator: IEnumerator

   {

      private int position = -1;

      private Tokens t;

      public TokenEnumerator(Tokens t)

      {

         this.t = t;

      }

      public bool MoveNext()

      {

         if (position < t.elements.Length - 1)

         {

            position++;

            return true;

         }

         else

         {

            return false;

         }

      }

      public void Reset()

      {

         position = -1;

      }

      public string Current // non-IEnumerator version: type-safe

      {

         get

         {

            return t.elements[position];

         }

      }

 

      object IEnumerator.Current // IEnumerator version: returns object

      {

         get

         {

            return t.elements[position];

         }

      }

   }

   // Test Tokens, TokenEnumerator

   static void Main()

   {

      Tokens f = new Tokens("This is a well-done program.guidee",

         new char [] {' ','-'});

      foreach (string item in f) // try changing string to int

      {

         Console.WriteLine(item);

      }

      // Testing Tokens by breaking the string into tokens:

      IEnumerable ff = new Tokens("This is a well-done program.",

         new char[] { ' ', '-' });

      foreach (string item in ff)

      {

          Console.WriteLine(item);

      }

   }

posted @ 2014-03-14 14:06  mimo0  阅读(405)  评论(0)    收藏  举报