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

Fio*_*ite 1 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(); 
        }
    } 
Run Code Online (Sandbox Code Playgroud)

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

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

Rya*_*ndy 6

基类行为由继承类继承.您不需要显式覆盖Equals,GetHashCode除非您想要更改其行为.