Nivel 4 — Clases
Estructuras
Notas originales de SunDiaL · Ver fuente en inglés
Una estructura es idéntica a una clase, salvo que es un tipo de valor. El 95 % de las veces utilizarás una clase, así que aquí se muestra únicamente cómo definir una estructura y una tabla con sus diferencias.
Definir una estructura
struct ThisIsMyStructNameForRealz
{
}
Diferencias entre clase y estructura
| Característica | Estructuras | Clases |
|---|---|---|
| Tipo | Tipos de valor, almacenados en la pila | Tipos de referencia, almacenados en el montículo con una referencia en la pila |
| Asignación de memoria | Reserva y liberación más rápidas para estructuras de datos pequeñas | Tienen un coste adicional, pero ofrecen más flexibilidad para objetos complejos |
| Herencia | No pueden heredar de otras estructuras ni clases; solo pueden implementar interfaces | Admiten herencia, lo que permite jerarquías de clases |
| Comportamiento en la asignación | Crean una copia de todos los datos al asignarse a una nueva variable | Solo copian la referencia; ambas variables apuntan al mismo objeto |
| Constructores predeterminados | Tienen constructores implícitos sin parámetros que inicializan los campos con sus valores predeterminados | Requieren constructores explícitos sin parámetros si se necesitan |
| Cuándo conviene utilizarlas | Para crear estructuras de datos pequeñas y sencillasEl objeto tiene una vida cortaEl objeto no se modificará tras su creaciónSe desea semántica de valor: copia al asignarLa eficiencia de memoria es crítica | Para crear objetos complejos con comportamientosSe necesita herenciaEl objeto necesita semántica de referenciaEl objeto se modificará tras su creaciónEl objeto podría ser null |
| Ejemplos | Coordenadas de puntos, fechas, colores, pequeños objetos matemáticos | Entidades de negocio, servicios, controladores, componentes de interfaz de usuario |