¿Cómo se implementan Equals y GetHashCode en tipos anónimos?
La ayuda dice esto:
Los tipos anónimos son tipos de clase que se derivan directamente del objeto y que no se pueden convertir a ningún tipo, excepto al objeto. El compilador proporciona un nombre para cada tipo anónimo, aunque su aplicación no puede acceder a él. Desde la perspectiva de Common Language Runtime, un tipo anónimo no es diferente de ningún otro tipo de referencia.
Si dos o más inicializadores de objetos anónimos en un ensamblaje especifican una secuencia de propiedades que están en el mismo orden y que tienen los mismos nombres y tipos, el compilador trata los objetos como instancias del mismo tipo. Comparten la misma información de tipo generada por el compilador.
Debido a que los métodos Equals y GetHashCode en los tipos anónimos se definen en términos de los métodos Equals y GetHashCode de las propiedades, dos instancias del mismo tipo anónimo son iguales solo si todas sus propiedades son iguales.
Estas cosas son ciertas, pero ¿cómo? La fuente de referencia muestra explícitamente cómo se comparan los objetos (ReferenceEquals
) y un tipo que 'deriva directamente del objeto' no puede tener este comportamiento especial. No coincide con el comportamiento deEquals
enValueType
ya sea.
Entonces, ¿cómo se hace? ¿Cómo pueden anular los tipos anónimos?Equals()
yGetHashCode()
sin anulaciones visibles?