Кажется, что две страницы документации противоречат этой теме:
- ValueType.Equals Method говорит: "По умолчанию метод Equals использует отражение для сравнения соответствующих полей obj и этого экземпляра."
- Object.Equals Method (Object) говорит: "Стандартная реализация Equals поддерживает ссылочное равенство для ссылочных типов и побитовое равенство для типов значений".
Итак, это поразрядное равенство или отражение?
Я взглянул на исходный код ValueType
и нашел комментарий, говорящий
//если в этом объекте нет ссылок GC, мы можем избежать отражения
//и выполните быстрый memcmp
Может ли кто-нибудь уточнить, что означает "ссылка GC"? Я думаю, это поле, имеющее ссылочный тип, но я не уверен.
Если я создаю struct
, который имеет только поля типа значения, будут ли экземпляры его всегда сравнивать быстрый способ?
ОБНОВЛЕНИЕ: Документация for.Net 4.5 значительно улучшена: она свободна от указанного противоречия и теперь дает лучшее представление о том, как работает проверка соответствия типов по умолчанию.