gpt4 book ai didi

c# - 在 C# 接口(interface)实现中重写 equals

转载 作者:行者123 更新时间:2023-11-30 13:57:16 26 4
gpt4 key购买 nike

我有一个实现接口(interface)的类,例如:

interface IInterface
{
string PropA { get; }
string PropB { get; }
}

class AClass : IInterface
{
string PropA { get; protected set; }
string PropB { get; protected set; }
}

平等是根据 PropA 和 PropB 确定的。当覆盖 AClass 的 Equals 方法时,我是否应该尝试将 obj 转换为 AClass,如下所示:

public override bool Equals(object obj)
{
AClass other = obj as AClass;
return other != null
&& AClass.PropA == other.PropA
&& AClass.PropB == PropB;
}

或者我应该尝试将 obj 转换为 IInterface,如下所示:

public override bool Equals(object obj)
{
IInterface other = obj as IInterface;
return other != null
&& AClass.PropA == other.PropA
&& AClass.PropB == PropB;
}

最佳答案

可以做任何你想做的事。两者在功能上并不相同,但我们无法回答哪个对您“正确”。如果我有一个 BClass实现相同接口(interface)的类,并且它的两个属性具有相同的值,应该它等于您的 AClass目的?如果是,就做后者,如果不是,就做前者。

就我个人而言,我会发现后者令人担忧。一般来说,我发现如果一个类要实现自己对平等的个人定义,其他类不应该与它相等。一个主要原因是如果相等是对称的则更好。也就是说aclass.Equals(bclass)应返回与 bclass.Equals(aclass) 相同的内容.当您不将相等性限制为相同类型时获得该行为是......很难。它需要所有相关类的合作。

如果您有一些令人信服的理由来比较 IInterface它们可能是不同的底层类但仍然“相等”的实现,我个人更喜欢创建一个 IEqualityComparer<IInterface>为该接口(interface)定义相等性。这将与两个实现类中的任何一个的相等性定义分开。

关于c# - 在 C# 接口(interface)实现中重写 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22101703/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com