c# - 覆盖 Equals 和 GetHashCode - 派生类中的默认实现

标签 c# inheritance equals gethashcode

我对 C# 中 Equals 和 GetHashCode 的默认行为有点困惑。
假设我有两个类,一个派生自另一个:

public abstract class Question
    {
        public string QuestionText
        {
            get;
            set;
        }

        public override bool Equals(object obj)
        {
            if (obj is Question)
            {
                Question q = (Question)obj;
                return this.QuestionText.Equals(q.QuestionText);
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode()
        {
            int hash = 13; 
            hash = (hash * 7) + this.QuestionText.GetHashCode(); 
            return hash; 
        }
 }

public class QuestionTrueFalse : Question
    {
        public bool CorrectAnswer
        {
            get;
            set;
        }

        public override bool Equals(object obj)
        {
            return base.Equals(q);
        }

        public override int GetHashCode()
        {
            return base.GetHashCode(); 
        }
    } 

派生类不会影响一项是否等于另一项,我仍然希望它仅基于 QuestionText 属性。

我是否需要重写 Equals 和 GetHashCode 以引用基本实现,就像我在这里所做的那样,或者这是默认行为?

最佳答案

基类行为由继承类继承。您不需要显式覆盖 EqualsGetHashCode除非你想改变他们的行为。

关于c# - 覆盖 Equals 和 GetHashCode - 派生类中的默认实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043369/

相关文章:

c# - 如何在插入失败时获取冲突行的主键?

C# ListView 列宽自动

c# - 是否可以为接口(interface)引用定义 == 的行为?

java - 为什么我们不能使用 '==' 比较两个 float 或 double

c# - Azure Key Vault - 编程创建

c# - 从 P/Invoke 捕获 DllNotFoundException

C++类继承问题

c++ - 在从 Boost 派生的类派生的类中自动禁止复制是不可复制的吗?

Django:将继承(嵌套)值呈现为 forms.ModelForm 中的列表

java - 为什么我们必须重写 Java 中的 equals() 方法?