[英]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/cfttsh47 ( Comparer<T>
) .aspx ( Comparer<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.