在编写比较器类时,从4.0版开始,C#中的最佳实践是什么:
一个。我们应该继承Comparer抽象类吗?要么
湾我们应该实现IComparer接口。
优缺点都有什么?
在编写比较器类时,从4.0版开始,C#中的最佳实践是什么:
一个。我们应该继承Comparer抽象类吗?要么
湾我们应该实现IComparer接口。
优缺点都有什么?
我建议你延长 Comparer<T>
类而不是实现 IComparer<T>
接口,Microsoft也是如此(参见下面的第一个参考资料)。
现在,如果你想让你的对象(无论是什么)能够与自己进行比较,它可以实现 IComparable
界面(见下面的第二个参考)。
从: http://msdn.microsoft.com/en-us/library/8ehhxeaf(v=vs.110).aspx (IComparer<T>
)
我们建议您从中获取
Comparer<T>
类而不是实现IComparer接口,因为Comparer<T>
class提供了一个显式的接口实现IComparer.Compare
方法和Default
获取对象的默认比较器的属性。
从: http://msdn.microsoft.com/en-us/library/cfttsh47(v=vs.110).aspx (Comparer<T>
)
从这个类派生来提供自定义的实现
IComparer<T>
用于集合类的接口,例如SortedList<TKey, TValue>
和SortedDictionary<TKey, TValue>
通用类。 从Comparer类派生和实现之间的区别System.IComparable
界面如下:
- 要指定默认情况下应如何比较两个对象,请执行
System.IComparable
你班上的界面。这可确保排序操作将使用您提供的默认比较代码。- 要定义要使用的比较器而不是默认比较器,请从Comparer类派生。然后,您可以在将比较器作为参数的排序操作中使用此比较器。
从 这篇关于MSDN的文章:
我们建议您从Comparer类派生而不是实现IComparer接口,因为Comparer类提供IComparer.Compare方法的显式接口实现和获取对象的默认比较器的Default属性。