C#でのEqualsとGetHashCodeのデフォルトの動作について少し混乱します。 は、私は二つのクラス、他から1つの導出持って言う:派生クラスが一つの項目が他に等しいかどうかには影響しません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をオーバーライドする必要がありますか、それともデフォルトの動作ですか?
はなぜあなたがちょうど '書く公共オーバーライドint型のGetHashCodeメソッド(){91を返さない+この.QuestionText.GetHashCode(); } '? – phoog