我对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来引用基本实现,或者这是默认行为吗?
最佳答案
基类的行为由继承的类继承。除非要更改它们的行为,否则无需显式覆盖Equals
和GetHashCode
。