Переопределение метода GetHashCode() - C#
Формулировка задачи:
В МСДН прописано, что если программист решит переопределить метод Equals, то стоит и переопределить GetHashCode. На примере класса, описывающего простую точку с положениями на двух осях были переопределены эти методы таким образом:
Зачем вообще в этом случае требуется переопределение хеш кода и как понимать эту конструкцию - x ^ y?
class TwoDPoint : System.Object { public readonly int x, y; public TwoDPoint(int x, int y) //constructor { this.x = x; this.y = y; } public override bool Equals(System.Object obj) { // If parameter is null return false. if (obj == null) { return false; } // If parameter cannot be cast to Point return false. TwoDPoint p = obj as TwoDPoint; if ((System.Object)p == null) { return false; } // Return true if the fields match: return (x == p.x) && (y == p.y); } public bool Equals(TwoDPoint p) { // If parameter is null return false: if ((object)p == null) { return false; } // Return true if the fields match: return (x == p.x) && (y == p.y); } public override int GetHashCode() { return x ^ y; } }
Решение задачи: «Переопределение метода GetHashCode()»
textual
Листинг программы
a.GetHashCode() == b.GetHashCode() && a.Equals(b)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д