我们说我有一个代码:
public interface IInterface
{
// Properties...
}
internal class Realisation : IInterface, IEquatable<IInterface>
{
// Properties...
public bool Equals(IInterface other)
{
// ...
}
public override bool Equals(object obj)
{
return Equals(obj as IInterface);
}
public override int GetHashCode()
{
// ...
}
}
目的是没有重复/不同版本的相等代码。
我无法访问Realisation
,因为代码位于库中。
如果我必须调用IInterface
的相等比较器,那么在这里调用EqualityComparer<IInterface>.Default
是否有意义?它会使用Equals(IInterface other)
实现吗?或者平等实施是否应该在课堂之外?我应该提供自定义IEqualityComparer<IInterface>
吗?
修改
Equals(object obj)
和GetHashCode()
覆盖答案 0 :(得分:0)
我建议你把你的比较器放在你的课外,因为它满足Single responsibility principle
- 类只做一个任务比多个事情(它不应该成为超级分支)和(Open Close Principle)Extend your class rather than modifying your class
,这意味着在你的班级中保持seprate class rahter中相等的代码。 (这是我的建议)
如果您有权访问类代码而不是使用IEquatable
,那么还有一件事,覆盖基础对象类方法,如Equals & GetHashcode
。