La diferencia más esencial entre class y struct es que class es un tipo de referencia, mientras que struct es un tipo de valor, y su asignación en memoria es diferente.
¿Qué es la clase?
Clase, un concepto fundamental en la programación orientada a objetos, es un tipo de estructura de datos personalizada que normalmente contiene campos, atributos, métodos, atributos, constructores, indexadores, operadores, etc. En .NET, todas las clases heredan finalmente de la clase System.Object, por lo que son un tipo de referencia, es decir, cuando tienes una instancia de una clase, la dirección de esa instancia en el heap gestionado se almacena en la pila, y el valor de la instancia se almacena en el heap gestionado.
¿Qué es un struct?
Una estructura es un tipo de valor utilizado para organizar un conjunto de variables relacionadas en una sola entidad variable. Todas las estructuras se heredan de la clase System.ValueType, por lo que son un tipo de valor, es decir, la instancia de la estructura se crea en la pila donde se asigna el hilo y almacena el valor en sí mismo. Así que al usar struct, podemos tratarlo como una clase de tipo básica como int y char.
1. clase es el tipo de referencia, y structs es el tipo de valor
Dado que la clase es un tipo de referencia, la clase puede establecerse en nula. Pero no podemos hacer que struct sea nula porque es un tipo de valor.
2. Cuando instancias una clase, esta se creará en el heap. Y instancias un struct, que se creará en la pila
3. Estás usando una referencia a una instancia de clase. Y no estás usando una referencia a una struct. (en su lugar, úsalos directamente)
4. Cuando pasamos clase como argumento a un método, pasamos una referencia. Struct pasa un valor, no una referencia.
5. las estructuras no pueden tener inicializadores, las clases pueden tener inicializadores.
6. Las clases pueden tener constructores sin parámetros evidentes, pero las Structs no pueden
7. La nueva palabra clave debe instanciarse antes de que se use la clase, y la Struct no la necesita
8. La clase soporta herencia y polimorfismo, Struct no. Nota: Pero Struct puede implementar interfaces igual que clases
9. Dado que Struct no soporta herencia, sus miembros no pueden modificarse con Internal protegido o protegido
10. El constructor de Class no necesita inicializar todos los campos, y el constructor de Struct debe inicializar todos los campos
11. La clase puede definir un destructor, pero Struct no puede
12. La clase es adecuada para datos grandes y complejos, y Struct es adecuada para nuevos tipos que a menudo se usan como una combinación de algunos datos.
Ocasiones aplicables: Struct tiene ventajas de rendimiento y Class ventajas de extensión orientada a objetos.
El tipo utilizado para el almacén de datos subyacente está diseñado como un tipo Struct, y el tipo usado para definir el comportamiento de la aplicación se diseña como una Clase. Si no tienes claro cómo aplicar el tipo en el futuro, deberías usar Clase. |