程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 構建可反轉排序的泛型字典類(5)--實現IEnumerable接口(4)

構建可反轉排序的泛型字典類(5)--實現IEnumerable接口(4)

編輯:關於C語言

這個嵌套類的代碼對照圖3很 容易看懂,每個方法的功能在MSDN中也有詳細的介紹,這裡不再對它進行講解。 接下來要給外部類實現IEnumerable<KeyValuePair<TKey, TValue>>和 IEnumerable接口。更改類聲明代碼如下:

public class ReversibleSortedList<TKey, TValue> :

IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable

當然,這兩個接口分別只有一個成員:GetEnumerator()方 法,剛才所創建的嵌套類就是為這個方法所創建的。接下來在 ReversibleSortedList類中使用顯式接口成員實現來實現這兩個接口:

IEnumerator<KeyValuePair<TKey, TValue>>
     IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
  {
    return new Enumerator<TKey, TValue>(this);
  }
  IEnumerator IEnumerable.GetEnumerator()
  {
    return new Enumerator<TKey, TValue>(this);
  }

好,現在 更改Main()方法中的代碼看看是否可以使用foreach循環來訪問 ReversibleSortedList中的元素,當然,前面所寫的Print()成員方法可以退休 了。

static void Main()
  {
     ReversibleSortedList<int, string> rs=new ReversibleSortedList<int, string>();
    rs.Add (3,"a");
    rs.Add(1,"b");
     rs.Add(2,"c");
    rs.Add(6,"d");
     rs.Add(5,"e");
    rs.Add (4,"f");
    foreach (KeyValuePair<int, string> d in rs)
    {
      Console.WriteLine (d.Key + "  " + d.Value);
    }
  }

由於代碼已經達到300行,貼到博客上會導致運行緩慢,後面所 有的可運行代碼將以文件的形式給出,大家可以直接下載運行。

ReversibleSortedList 0.4版本:實現迭代

運行結果:

1  b
2  c
3  a
4  f
5  e
6  d

真棒,現在已經取得了階段性的成果。但還有一些遺憾 ,雖然在Enumerator類中實現了IDictionaryEnumerator接口,但還不能在 foreach中使用DictionaryEntry訪問元素。這是因為IDictionary接口重載了 GetEnumerator()接口,而它返回的是一個IDictionaryEnumerator接口,也就是 說,只有實現了IDictionary接口才能使用DictionaryEntry訪問其中元素。實現 IDictionary接口之前我們需要建立一些輔助的內部類,這將在下一節進行講解 。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved