Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 31087|Respuesta: 0

[Fuente] Diario de aprendizaje tipo anónimo en C#

[Copiar enlace]
Publicado en 16/10/2020 17:41:04 | | | |
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.




Anterior:Los datos de SQL Server se exportan como un script de inserción
Próximo:.net/C# refleja funciones &lt;&gt;f__AnonymousType0 métodos no anónimos
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com