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

構建可反轉排序的泛型字典類(6)--實現IDictionary接口中的Keys和Values屬性(1)

編輯:關於C語言

6. 實現IDictionary接口中的Keys和Values屬性

現在我們可以著眼於IDictionary接口的實現。第4節中,專門針對這個接口做了一 個最簡化的例子,我們來回顧一下,它是怎麼實現IDictionary接口中的Keys和Values屬性的。

public ICollection Keys
  {  //返回所有鍵的集合
    get
    {  //把所有鍵的集合拷貝到新數組中並返回
      Object[] keys = new Object[ItemsInUse];
      for (Int32 n = 0; n < ItemsInUse; n++)
        keys[n] = items[n].Key;
      return keys;
    }
  }
  public ICollection Values
  {  //返回 所有值的集合
    get
    {  //把所有值的集合拷貝到新數組中並返回
      Object[] values = new Object[ItemsInUse];
      for (Int32 n = 0; n < ItemsInUse; n++)
        values[n] = items [n].Value;
      return values;
    }
  }

可以很清楚地看到,它把數組裡的所有元素拷貝 到另一塊內存空間中並返回,這再一次帶來了性能問題,如果頻繁地訪問Keys和Values屬性還會給垃圾回收帶來壓力。最好的解決辦法當然是 直接引用而不是拷貝數組裡的元素,你還希望增加一些功能,可以使用索引訪問Keys屬性或Values屬性所返回的ICollection。但從第5節中的 圖2(最好直接下載下來以方便觀看)中可以看到ICollection接口只有寥寥幾個成員,並沒有Item屬性,怎麼辦呢?當然是從ICollection的子 接口中尋找合適的接口了。我們知道,ICollection接口是集合接口的基接口,而它的子接口則是更專用的集合接口,如IDictionary表示帶有鍵\值對的集合,IList表示值的集合,它們都可以按索引訪問。

所以這一次你決定另外實現公有的Keys和Values屬性,並返回一個 ILst<T>接口,並手動實現它,一方面滿足所有的功能,另一方面也可以實現IDictionary和IDictionary<TKey, TValue>接口的 Keys和Values屬性。好,先來看看ILst<T>接口的關系圖:

圖4 IList<T>接口關系圖

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