Я только что сделал пример теста, и я не вижу, как он начинается с 1 и получает приращение.
for (int i = 0; i < 16; i++)
{
object obj = new object();
Console.Write(obj.GetHashCode() + " ");
}
с этими результатами:
45653674 41149443 39785641 45523402 35287174 44419000 52697953 22597652
10261382 59109011 42659827 40644060 17043416 28756230 18961937 47980820
На самом деле, используя Reflector, я мог видеть только это:
internal static extern int InternalGetHashCode(object obj);
Итак, как это на самом деле происходит, для меня загадка (может быть, есть образец, но я не собираюсь копать глубже в этом месте - может быть, какое-то «псевдослучайное число» алгоритм ? ). Кто-нибудь из команды CLR может ответить на этот вопрос.
Что касается других вопросов, Рид на самом деле избил меня ударом: GetHashCode
и Equals
. MSDN page описывает это с несколькими подробностями, на всякий случай.