因此,我为实体提供了一个接口,该接口要求实体公开其标识。
public interface IEntity<TIdentity> {
public TIdentity Id { get; }
}
现在我需要能够比较两个实体,其彼此,但我不能依靠的默认实现Equals
,并GetHashCode
因为实体应该由他们进行比较的身份,而不是整体的签名。由于实现的每个类IEntity<'1>
都应具有可比性,因此我考虑IEquatable<'1>
直接在实体接口上声明。
好吧..那行不通。当我IEquatable<'1>
在IEntity<'1>
接口上声明时,强制实施类以实现以下目的:
public bool Equals(IEntity<'1> other)
代替
public bool Equals(TypeImplementingIEntity other)
因此,在调用Equals
两个实体时,运行时将返回引用,Equals(object obj)
因为所提供的方法上的参数IEquatable<'1>
类型与实际类型不匹配!做什么?
它应该工作。Equals(IEntity<TIdentity>)
应该优先于Equals(object)
Equals(object)
无论如何,您都应该覆盖:
public override bool Equals(object other) {
return Equals(other as IEntity<TIdentity>);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句