我有一个域模型,可以用以下简单表示。
我希望你能实现IEquatable的功能,使我能够编写类似以下代码的内容。
我的第一反应是让IMyInterface实现IEquatable,但当然我不能在IMyInterface中实现。我必须在ClassA和ClassB中实现。这种解决方案的问题在于,ClassA和ClassB中IEquatable的实现将完全相同,一行一行地相同。有没有一种优雅的方法来完成这个任务?当ClassC出现时,我不想复制和粘贴50行重复的IEquatable代码。
我考虑使用抽象基类代替接口,但在这种情况下,IMyInterface只描述了类将执行的操作,而不是类本身。ClassA和ClassB除了都能执行IMyInterface合同中的操作之外,并没有太多相似之处。
任何见解都是有帮助的,感谢您的时间。
IMyInterface
ClassA : IMyInterface
ClassB : IMyInterface
我希望你能实现IEquatable的功能,使我能够编写类似以下代码的内容。
if(dynamicallyCreatedInstanceOfClassA == dynamicallyCreatedinstanceOfClassB)
{
// Do something relevant
}
我的第一反应是让IMyInterface实现IEquatable,但当然我不能在IMyInterface中实现。我必须在ClassA和ClassB中实现。这种解决方案的问题在于,ClassA和ClassB中IEquatable的实现将完全相同,一行一行地相同。有没有一种优雅的方法来完成这个任务?当ClassC出现时,我不想复制和粘贴50行重复的IEquatable代码。
我考虑使用抽象基类代替接口,但在这种情况下,IMyInterface只描述了类将执行的操作,而不是类本身。ClassA和ClassB除了都能执行IMyInterface合同中的操作之外,并没有太多相似之处。
任何见解都是有帮助的,感谢您的时间。
IEqualityComparer<T>
通常代表着广泛的等价形式,而T
可能对此一无所知。例如,两个恰好实现了IList<T>
的对象,只有当它们始终包含相同顺序的相同项时,才应该报告它们彼此相等。然而,一个对象能够将其拥有的列表存储到Dictionary<IList<T>,whaever>
中可能很有用,其中包含任何顺序相同的项的列表将比较相同。 - supercatIList<T>
中不存在这样的比较方法;实现通常也不会提供这样的方法。尽管如此,在某些情况下,这样的比较方法可能是有用的,因此使用外部类来实现一个以这种方式实现的ICEqualityComparer<IList<T>>
是完全合理的。 - supercat