gpt4 book ai didi

c# - 如何覆盖一般 BaseClass 中的 GetHashCode

转载 作者:行者123 更新时间:2023-11-30 21:20:22 24 4
gpt4 key购买 nike

Internet 上有很多关于在覆盖 Equals 时如何覆盖 GetHashCode() 的信息。但是,所有这些示例都是关于包含一些可以生成哈希的字段的类。我试图找到的是一个很好的 GetHashCode 实现,用于我用于所有业务逻辑层对象的基类。这个类称为 BusinessLogica,包含一个 ToString() 实现、我的框架的一些基本功能和以下 Equals 覆盖:

    public override bool Equals(object obj)
{
bool retValue;

if (obj is BusinessLogica && this.GetType() == obj.GetType())
{
retValue = this.ID == ((BusinessLogica)obj).ID;
}
else
{
retValue = false;
}

return retValue;
}

现在,我到目前为止所做的是,当我需要一个扩展此 BusinessLogica 的对象并将其用作字典中的键时,我会覆盖此特定类中的 GetHashCode 并返回 ID。我还可以在 BusinessLogica 基类中使用此实现。这“安全”吗?我还看到了返回 ToString().GetHashCode() 的示例。

什么是明智的使用?或者这个级别的 GetHashCode 不可用,我真的应该在我的每个 BusinessLogica 类中重写它吗?

最佳答案

因为您只使用 ID 属性来测试相等性,那么几乎可以肯定这也是您应该用来派生哈希码的东西。

如果 ID 是一个 Int32,那么从 GetHashCode 方法返回 this.ID 应该没问题。如果 ID 是其他类型,那么您可以返回 this.ID.GetHashCode()

关于c# - 如何覆盖一般 BaseClass 中的 GetHashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3333967/

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