我对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

09-30 17:05
查看更多