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

C# 泛型秘訣(5.2):ReversibleSortedList 私有方法、屬性與欄位完整原始碼

     編輯:關於C#

承接上文,本文呈現 ReversibleSortedList 的私有方法區、公用/私有屬性區、欄位區完整原始碼,涵蓋容量管理、插入/刪除陣列搬移、二分搜尋索引、顯式介面實現、排序方向切換等核心邏輯。

私有方法重點

  • EnsureCapacity(min):雙倍成長策略,呼叫 InternalSetCapacity。
  • Insert(index, key, value):Array.Copy 後移元素,雙陣列同步搬移,更新 _size、version。
  • InternalSetCapacity(value, updateVersion):配置新陣列、複製舊資料、處理縮容/擴容、版本號遞增。
  • IsCompatibleKey/VerifyKey/VerifyValueType:非泛型介面(IDictionary、ICollection)轉型檢查。
  • 顯式介面實現:ICollection.Add/Contains/CopyTo/Remove、IDictionary.Add/Contains/Remove/GetEnumerator、IEnumerable.GetEnumerator 統一委派給泛型實作。

屬性設計

欄位定義


private const int _defaultCapacity = 4;
private int _size;
private TKey[] keys;
private TValue[] values;
private KeyList keyList;
private ValueList valueList;
private int version; // 列舉器版本檢查用
private SortDirectionComparer _sortDirectionComparer;
private ListSortDirection _currentSortDirection = ListSortDirection.Descending;
private static TKey[] emptyKeys;
private static TValue[] emptyValues;

排序方向切換

SortDirectionComparer 內部持有 ListSortDirection,Compare 依方向反轉比較結果,使同一組鍵陣列可在不重排情況下支援正向/反向列舉與索引器查找。

顯式介面實現意義

  • 隱藏非泛型成員(Add(object,object) 等),避免污染公開 API。
  • 統一轉派給泛型實作,確保行為一致。
  • 滿足 IDictionary、ICollection、IEnumerable 契約,相容舊代碼。

此實作展示了 .NET Framework 內部 SortedList 的核心架構,理解它有助於設計自訂高效能泛型集合。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性用途
Capacity取得/設定內部陣列長度,設定時呼叫 InternalSetCapacity
Comparer回傳 SortDirectionComparer,支援升冪/降冪切換
Count / _size實際元素數量
this[TKey]索引器:BinarySearch 找鍵,找到更新值,否則 Insert(~index, key, value)
Keys / Values回傳 KeyList/ValueList 唯讀視圖