/ / Чому я отримую два різних хеш-коди? - c #

Чому я отримую два різних хеш-коди? - c #

Це мій код. Чому хеш-код моїх двох об’єктів не однаковий?

public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}

static void Main(string[] args)
{
Person p1 = new Person()
{
Age = 21,
Name = "Anna"
};

Person p2 = new Person()
{
Age = 21,
Name = "Anna"
};

int i = p1.GetHashCode();
int j = p2.GetHashCode();

Console.ReadLine();
}

Відповіді:

7 для відповіді № 1

Оскільки ви не переосмислюєте GetHashCode, ви будете використовувати System.Object версія за спадщиною.

Метод GetHashCode може бути замінений похідним типом. Якщо GetHashCode не перекрито, хеш-коди для посилальних типів обчислюються за допомогою виклику методу Object.GetHashCode базового класу, який обчислює хеш-код на основі посилання на об'єкт

Іншими словами, оскільки вони "не однакові об'єкт об'єкта, вони не будуть мати однаковий хеш-код.

Щоб вони мали однаковий хеш-код, вам доведеться реалізувати свій власний GetHashCode, замінивши його в класі Person, наприклад, простий;

public override int GetHashCode ()
{
return Name.GetHashCode () ^ Age.GetHashCode ();
}

2 для відповіді № 2

Тому що вони не є одним і тим же об'єктом, вони просто зберігають однакові дані.