класс имеет свойство ID, и это свойство получает значение из столбца первичного ключа таблицы SQL.
Это хорошая практика, если я пишу
public override int GetHashCode()
{
return this.ID + GetType().GetHashCode();
}
в мой класс? (Равенство переопределено уже таким же образом.)
Почему вы особенно хотите включить тип в хэш-код? Я вижу, как это могло бы быть полезно, если бы у вас было много разных типов объектов с одним и тем же идентификатором на одной карте, но обычно я просто использовал
public override int GetHashCode()
{
return ID; // If ID is an int
// return ID.GetHashCode(); // otherwise
}
Обратите внимание, что идеи равенства становятся сложными в иерархиях наследования - еще одна причина предпочитать композицию над наследованием. Вам действительно нужно беспокоиться об этом? Если вы можете запечатать свой класс, это упростит тест равенства, поскольку вам нужно только написать:
public override bool Equals(object obj)
{
MyType other = obj as other;
return other != null && other.ID == ID;
}
(Возможно, вам захочется иметь строго типизированный метод Equals и реализовать IEquatable.)
Почему вы не можете просто сделать
public override int GetHashCode() {
return this.ID.GetHashCode();
}
Я не уверен, что то, что вы делаете, является хорошей практикой, потому что я не знаком с тем, как хэш-код присваивается экземпляру типа. И цель хэш-кода состоит в том, чтобы иметь представление консистенции объекта в форме Int32.