首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C# 原則 40:根據需求選擇集合 (下)

     編輯:關於C語言

C# 1.x 時代的型別安全集合

C# 1.x 集合皆儲存 object 參考。CollectionBase、ReadOnlyCollectionBase、DictionaryBase 提供抽象基類,可建立型別安全介面包裝非安全集合。C# 2.0 泛型將徹底解決此問題。

自訂型別安全集合(折衷做法)


public class MyObjectCollection : ArrayList
{
    [Obsolete("Please use specify object.", true)]
    public override int Add(object value) { return base.Add(value); }
    public int Add(MyObject value) { return base.Add(value); }
    new public MyObject this[int index]
    {
        get { return base[index] as MyObject; }
        set { base[index] = value; }
    }
}

利用 Obsolete 屬性阻止直接呼叫 Add(object),僅暴露強型別 Add(MyObject) 與索引子。本質仍非型別安全,但可攔截大多數誤用。

公開集合介面:索引子與 IEnumerable

類別包含集合時,應實作索引子與 IEnumerable:


// 多維索引子
public int this[int x, int y] { get { return ComputeValue(x, y); } }

// IEnumerable 介面
public interface IEnumerable { IEnumerator GetEnumerator(); }
public interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); }

若模型為陣列,考慮實作 IList、ICollection;若為字典,實作 IDictionary。最簡單做法:繼承 CollectionBase 或 DictionaryBase。

總結

  • 大多數情況陣列效能最佳。
  • 需彈性增刪時選擇適當集合類別。
  • 自訂集合類別務必實作索引子與 IEnumerable。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved