Cuando no queremos definir clases complejas como métodos complejos, eventos y constructores, podemos generar dinámicamente un tipo de dato personalizado -> tipo anónimo.
1. Definir el tipo de anonimato
Al definir un tipo anónimo, necesitas usar la palabra clave var y la sintaxis de inicialización de objetos.
var: El compilador genera automáticamente una nueva definición de clase en tiempo de compilación (no podemos ver el nombre de la clase en el código C#).
Inicialización: Indicará al compilador que cree campos privados en segundo plano y propiedades (solo lectura) para el tipo recién creado.
Construye un tipo anónimo pasando parámetros e imprimiendo la información relevante
Llamada: Los tipos anónimos también pueden construirse usando código rígido
2. Representación interna de tipos anónimos
Todos los tipos anónimos heredan automáticamente de Object, así que podemos usar ToString, GetHashCode, Equals en el objeto car, intentemos llamar a esto:
Decisiones y resultados:
El tipo del objeto coche es: <>f__AnonymousType03 (el tuyo puede ser diferente), el nombre anónimo del tipo lo siente el compilador, no podemos interferir, código CIL.
3. Implementación de los métodos ToString() y GetHashCode().
1. ToString()
2.GetHashCode()
Utiliza la variable de cada tipo anónimo para calcular el valor hash como entrada de tipo de System.Collections.Generic.EqualityComparer, y solo <T>produce el mismo valor hash si los dos tipos anónimos tienen las mismas propiedades y se les asigna el mismo valor.
4. Semántica igual de tipos anónimos
Iguales()
Analiza los resultados:
1. Igual(): El compilador anula Igual() para determinar que los objetos son iguales basándose en la semántica de valores (por ejemplo, señala el valor de cada miembro de datos de dos objetos)
2. == Operadores: Como los tipos anónimos no sobrecargan operadores equivalentes (== , !=), == compara referencias, no contenido.
3. GetType(): Porque si declaramos dos tipos anónimos idénticos (con los mismos atributos) en el mismo ensamblador, el compilador solo generará una definición de un tipo anónimo.
5. Tipos anónimos que contienen tipos anónimos
Resumen:
De hecho, debemos ser cautelosos al usar tipos anónimos, especialmente al usar LINQ, y nunca abandonar el uso de clases o estructuras fuertemente tipadas debido a la aparición de tipos anónimos.
De hecho, el tipo anónimo en sí tiene muchas limitaciones:
- No controlas el nombre del tipo anónimo
- Los tipos anónimos heredan System.Object
- Los tipos anónimos de campos y atributos siempre son de solo lectura
- Los tipos anónimos no admiten eventos, métodos personalizados, operadores personalizados ni reescrituras personalizadas
- Los tipos anónimos están implícitamente sellados
- La creación de entidades de tipos anónimos utiliza únicamente el constructor por defecto
Si necesitamos definir rápidamente la forma de una entidad sin definir su función, podemos usar el tipo anónimo. |