簡體   English   中英

我們應該擴展Comparer嗎? <T> 或實現IComparer <T>

[英]Should we extend Comparer<T> or implement IComparer<T>

在編寫比較器類時,從4.0版開始,C#中的最佳實踐是什么:

一個。 我們應該繼承Comparer抽象類嗎? 要么

我們應該實現IComparer接口。

優缺點都有什么?

我建議你擴展Comparer<T>類,而不是像Microsoft那樣實現IComparer<T>接口(參見下面的第一個參考資料)。

現在,如果您希望對象本身(無論T是什么)能夠與自身進行比較,它可以實現IComparable接口(請參閱下面的第二個參考)。


來自: http//msdn.microsoft.com/en-us/library/8ehhxeaf ( IComparer<T> ) .aspx ( IComparer<T>

我們建議您從Comparer<T>類派生而不是實現IComparer接口,因為Comparer<T>類提供IComparer.Compare方法的顯式接口實現和獲取對象的默認比較器的Default屬性。

來自: http//msdn.microsoft.com/en-us/library/cfttsh47Comparer<T>.aspxComparer<T>

派生自此類以提供IComparer<T>接口的自定義實現,以用於集合類,例如SortedList<TKey, TValue>SortedDictionary<TKey, TValue>泛型類。 從Comparer類派生和實現System.IComparable接口之間的區別如下:

  • 要指定默認情況下應如何比較兩個對象,請在類中實現System.IComparable接口。 這可確保排序操作將使用您提供的默認比較代碼。
  • 要定義要使用的比較器而不是默認比較器,請從Comparer類派生。 然后,您可以在將比較器作為參數的排序操作中使用此比較器。

MSDN上的這篇文章

我們建議您從Comparer類派生而不是實現IComparer接口,因為Comparer類提供IComparer.Compare方法的顯式接口實現和獲取對象的默認比較器的Default屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM