相关疑难解决方法(0)

IEquatable <T>,IComparable <T>应该在非密封类上实现吗?

任何人对是否有任何意见IEquatable<T>IComparable<T>一般应要求Tsealed(如果是class)?

这个问题发生在我身上,因为我正在编写一组旨在帮助实现不可变类的基类.基类要提供的部分功能是自动实现相等比较(使用类的字段以及可应用于字段来控制相等比较的属性).当我完成时它应该是相当不错的 - 我正在使用表达式树为每个动态创建一个编译的比较函数T,因此比较函数应该非常接近正则相等比较函数的性能.(我使用键入的不可变字典System.Type和双重检查锁定以合理的方式存储生成的比较函数)

尽管如此,有一件事是用来检查成员字段相等性的函数.我的初衷是检查每个成员字段的类型(我将调用X)是否实现IEquatable<X>.但是,经过一番思考后,除非X是这样,否则我认为这是不安全的sealed.原因在于,如果X不是sealed,我无法确定是否X正确地将等式检查委托给虚拟方法X,从而允许子类型覆盖相等比较.

这就提出了一个更普遍的问题 - 如果一个类型没有被密封,它是否应该真正实现这些接口?我想不会,因为我认为接口契约是比较两种X类型,而不是两种类型,可能是也可能不是X(虽然它们当然必须是X或者是子类型).

你们有什么感想?应该IEquatable<T>IComparable<T>避免对开封类?(也让我想知道是否有一个fxcop规则)

我现在的想法是让我产生比较功能只能用IEquatable<T>在成员字段,其Tsealed,而是用虚拟的Object.Equals(Object obj),如果T是密封的,即使T工具IEquatable<T>,因为该领域可能的潜在店亚型T和我怀疑的大多数实现IEquatable<T>适当设计的传承.

c# icomparable immutability sealed iequatable

36
推荐指数
2
解决办法
4313
查看次数

标签 统计

c# ×1

icomparable ×1

iequatable ×1

immutability ×1

sealed ×1