我对 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
除非你想改变他们的行为。
关于c# - 覆盖 Equals 和 GetHashCode - 派生类中的默认实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8043369/