OOP Course
Сьогодні

Підрозділ 4.7

Клас System.Object та його методи

Пояснює базовий клас System.Object і методи ToString, GetHashCode, GetType та Equals.

4.7. Клас System.Object та його методи

Усі класи в .NET — як вбудовані (int, string, DateTime), так і ті, що ми створюємо самостійно — є похідними від класу System.Object. Навіть якщо ми не вказуємо Object як базовий, компілятор додає це успадкування неявно. Це означає, що кожен об'єкт у C# гарантовано має чотири методи: ToString(), GetHashCode(), Equals() та GetType().

Методи System.Object доступні у кожному класі

Метод ToString

Метод ToString() повертає рядкове представлення об'єкта. Для числових типів це їхнє значення у вигляді рядка. Для власних класів стандартна реалізація повертає повну назву типу з простором імен:

Ми можемо перевизначити ToString(), щоб повертати змістовний рядок замість назви типу:

Зверніть увагу: Console.WriteLine(patient) автоматично викликає ToString() без явного звернення. Це справедливо для рядкової інтерполяції та конкатенації рядків — $"Пацієнт: {patient}" теж неявно викликає ToString().

Якщо клас частково заповнений (наприклад, відсутнє ім'я), можна повернути результат базової реалізації через base.ToString():

Метод GetHashCode

Метод GetHashCode() повертає ціле число — хеш-код об'єкта. Хеш-коди використовуються колекціями на основі хеш-таблиць (Dictionary<K,V>, HashSet<T>) для швидкого пошуку та зберігання об'єктів.

HashCode.Combine(...) — зручний вбудований спосіб об'єднати хеш-коди кількох полів. Два об'єкти, які рівні за Equals, зобов'язані повертати однаковий хеш-код — це фундаментальний контракт, який забезпечує коректну роботу колекцій.

Контракт рівності: Equals і GetHashCode завжди разом

Методи Equals і GetHashCode утворюють контракт рівності: якщо два об'єкти рівні (Equals повертає true), вони повинні мати однаковий хеш-код. Порушення цього правила призводить до некоректної поведінки словників і множин — об'єкти, які логічно рівні, не знаходитимуться у колекції.

Тому: якщо перевизначаєте Equals — завжди перевизначайте GetHashCode, і навпаки.

У клінічному контексті логічно вважати двох пацієнтів однаковими, якщо збігається їхній унікальний ідентифікатор картки (RecordId), — навіть якщо ім'я записане по-різному.

Метод GetType

Метод GetType() повертає об'єкт типу Type, який описує реальний тип об'єкта під час виконання. На відміну від інших методів Object, GetType() не можна перевизначити — це гарантує надійність системи типів:

GetType() завжди повертає реальний тип об'єкта, навіть якщо змінна оголошена як базовий тип. Це відрізняє його від оператора is, який також перевіряє сумісність з ієрархією (тобто patient is Person поверне true), тоді як GetType() == typeof(Person) поверне false для об'єкта Patient.

Розроблено Tomka Yurii · © 2026 ·