Diferencias entre Clases, Estructuras y Registros en C#
Clase 10 de 19 • Curso de Programación Orientada a Objetos con C#
Resumen
¿Qué son los tipos adicionales en C Sharp?
En el fascinante mundo de C Sharp, no solo las clases juegan un papel central en la programación orientada a objetos. Existen otros tipos, como las estructuras y los registros, que, aunque menos conocidos, son igualmente relevantes para escenarios específicos. Aprovechar estas diferencias puede optimizar tu código y facilitar la resolución de diversos problemas en C Sharp.
¿Cuál es la diferencia entre clase, estructura y registro?
A lo largo del curso, hemos explorado las clases en profundidad. Aquí, las diferencias entre clase, estructura y registro se vuelven vitales:
- Clases: Operan a través de referencias. Al crear un objeto, se reserva una posición de memoria y cada instancia será única, incluso si los datos son idénticos.
- Estructuras y registros: Funcionan basados en valores. Dos objetos con los mismos datos se consideran iguales.
Las clases son increíblemente versátiles y adecuadas para cualquier nivel de complejidad, desde componentes pequeños hasta soluciones grandes y complejas. En contraste, las estructuras y los registros son ideales para objetos pequeños y centrados en valores.
¿Cuándo utilizar estructuras o registros?
Las estructuras y los registros resultan útiles para:
- Comparar objetos por valor: Ideal para objetos muy pequeños con pocas propiedades.
- Datos inmutables: Especialmente relevante para los registros, donde los datos no cambian con el tiempo.
Por ejemplo, si necesitas comparar propiedades de objetos sin evaluar cada uno manualmente, los registros proporcionan una solución eficiente.
Ejemplo práctico: comparando clases y registros
Comparativa con clases
En el siguiente ejemplo, creamos dos objetos superman
y superman2
basados en la clase superhéroe
. Ambos poseen los mismos datos, pero al compararlos, el resultado es false
debido a que son instancias separadas con diferentes referencias de memoria:
var superman = new Superhéroe { Id = 1, Nombre = "Superman", IdentidadSecreta = "Clark Kent" };
var superman2 = new Superhéroe { Id = 1, Nombre = "Superman", IdentidadSecreta = "Clark Kent" };
Console.WriteLine(superman == superman2); // Output: false
Cómo funcionan los registros
Al utilizar registros, la misma comparación evaluaríamos como true
, ya que C Sharp permite comparar los conjuntos de valores internos de forma directa:
public record SuperhéroeRecord(int Id, string Nombre, string IdentidadSecreta);
var superhéroe1 = new SuperhéroeRecord(1, "Superman", "Clark Kent");
var superhéroe2 = new SuperhéroeRecord(1, "Superman", "Clark Kent");
Console.WriteLine(superhéroe1 == superhéroe2); // Output: true
Como ves, mientras que en las clases el resultado es false
, con registros es true
.
¿Por qué usar registros en microservicios?
Imagina que trabajas con microservicios, donde los registros de múltiples mensajes deben ser comparados. Aquí, los registros son una elección perfecta, ya que simplifican la comparación y permiten un enfoque más directo y eficiente, sin necesidad de verificación propiedad a propiedad.
Ejercicio recomendado
Para poner en práctica lo aprendido, te invitamos a:
- Completar el tipo
record
agregando más propiedades y comparar valores. - Crear un tipo
structure
y realizar un ejercicio similar.
Pronto: Modificadores de acceso en C Sharp
El conocimiento sigue creciendo. En la próxima lección, exploraremos modificadores de acceso en C Sharp, enriqueciendo aún más tus habilidades y comprensión del lenguaje. ¡Nos vemos allí!