在编写比较器类时,从4.0版开始,C#中的最佳实践是什么:
一个.我们应该继承Comparer抽象类吗?要么
湾 我们应该实现IComparer接口.
优缺点都有什么?
m-y*_*m-y 13
我建议您扩展Comparer<T>类而不是实现IComparer<T>接口,Microsoft也是如此(请参阅下面的第一个参考资料).
现在,如果您希望对象本身(无论T是什么)能够与自身进行比较,它可以实现IComparable接口(请参阅下面的第二个参考).
来自:http://msdn.microsoft.com/en-us/library/8ehhxeaf ( v=vs.110IComparer<T> ) .aspx()
我们建议您从
Comparer<T>类派生而不是实现IComparer接口,因为Comparer<T>该类提供了IComparer.Compare方法的显式接口实现以及Default获取对象的默认比较器的属性.
来自:http://msdn.microsoft.com/en-us/library/cfttsh47 ( v=vs.110Comparer<T> ) .aspx()
从这个类派生提供的自定义实现
IComparer<T>与集合类等使用接口SortedList<TKey, TValue>和SortedDictionary<TKey, TValue>泛型类.从Comparer类派生和实现System.IComparable接口之间的区别如下:
- 要指定默认情况下应如何比较两个对象,请
System.IComparable在类中实现该接口.这可确保排序操作将使用您提供的默认比较代码.- 要定义要使用的比较器而不是默认比较器,请从Comparer类派生.然后,您可以在将比较器作为参数的排序操作中使用此比较器.
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |