Colección de citas famosas - Slogan de motivación - ¿Qué es una clase (estructura)? NET BCL y ¿por qué no son estructuras (clases)?

¿Qué es una clase (estructura)? NET BCL y ¿por qué no son estructuras (clases)?

¿Cuál es la diferencia entre clase y estructura? ¿Tienen algún impacto en el rendimiento? ¿Qué es una clase (estructura)? NET BCL y ¿por qué no son estructuras (clases)? Al personalizar un tipo, ¿cómo elegir una clase o una estructura?

Las clases son los tipos más básicos de C#. Una clase es una estructura de datos que combina estados (campos) y operaciones (métodos y otros miembros de funciones) en una sola unidad. Las clases proporcionan definiciones para instancias de clases creadas dinámicamente, también conocidas como objetos. Las clases admiten herencia y polimorfismo, que son mecanismos mediante los cuales las clases derivadas pueden ampliar y especializar las clases base. (Primero, proporcione la definición de clase en el documento de especificación de C#. Jaja, si hace esta pregunta, se estima que muchas personas se molestarán, al igual que lo que es una persona).

Como clases, estructuras puede contener datos Estructuras de datos para miembros y miembros de funciones. Pero a diferencia de las clases, las estructuras son tipos de valores y no requieren asignación de montón. (Los tipos de referencia siempre se asignan desde el montón administrado, y las instancias de tipos de valor generalmente se asignan en la pila de subprocesos, aunque también están incrustadas como campos en objetos de tipos de referencia). Las variables de los tipos de estructura almacenan los datos de la estructura directamente, mientras que las variables de tipos de clase Almacena una referencia a un objeto asignado dinámicamente. Los tipos estructurales no admiten la herencia especificada por el usuario (todos los tipos de valores se derivan de System. ValueType y están sellados implícitamente), y todos los tipos estructurales heredan implícitamente del objeto de tipo.

Las estructuras son especialmente útiles para estructuras de datos pequeñas con semántica de valor. Los números complejos, los puntos en un sistema de coordenadas o los pares clave-valor en un diccionario son ejemplos típicos de estructuras. Para estructuras de datos pequeñas, el uso de estructuras en lugar de clases ahorrará significativamente la cantidad de memoria que su aplicación necesita asignar.

El constructor de estructuras también se llama mediante el operador new, pero esto no significa que se asignará memoria (el uso de tipos de valor alivia la presión sobre el montón administrado y reduce el tiempo de aplicación durante su vida útil La cantidad de recolección de basura que debe realizarse). En lugar de asignar dinámicamente un objeto y devolverle una referencia, el constructor de la estructura devuelve directamente el valor de la estructura (generalmente una ubicación temporal en la pila) y luego copia el valor de la estructura según sea necesario.

Para una clase, dos variables pueden hacer referencia al mismo objeto, por lo que las operaciones en una variable pueden afectar el objeto al que hace referencia la otra variable. Para las estructuras, cada variable tiene su propia copia de los datos y las operaciones en una variable no afectarán a otra variable.

Dos limitaciones de estructura. En primer lugar, copiar una estructura completa generalmente no es tan eficiente como copiar una referencia de objeto, por lo que las asignaciones y el paso de argumentos de valor a estructuras pueden ser más costosos que a tipos de referencia. En segundo lugar, a excepción de los parámetros ref y out, no se puede crear una referencia a la estructura, lo que limita el alcance de aplicación de la estructura.

Los documentos de especificaciones anteriores de C# son claros y autorizados. También deberías ver que esta diferencia no es tanto la diferencia entre clases y estructuras, sino más bien la diferencia entre tipos de referencia y tipos de valores.

Qué es una clase (estructura). NET BCL y ¿por qué no son estructuras (clases)?

BCL (Basic Class Library) es una biblioteca de clases utilizada por todos los lenguajes bajo el marco .Net. (¿Qué clases y estructuras hay? Solo dígame. ¿Cuántos espacios de nombres del sistema hay? ~ ~Personalmente, debe tenerse en cuenta que DateTime es en realidad una estructura. ¿Por qué no son estructuras? Esta pregunta y la siguiente pequeña pregunta son en realidad Lo mismo La pregunta es cuándo definir una estructura y cuándo definir una clase. Las siguientes preguntas se responderán juntas

Al personalizar un tipo, ¿cómo elegir una clase o una estructura?

¿A menos que cumpla con los requisitos? Todas las condiciones; de lo contrario, no lo defina como un tipo de valor (estructura).

En primer lugar, el tipo tiene el comportamiento de un tipo básico. y no tiene miembros que modifiquen ningún campo de instancia del tipo

p>

En segundo lugar, un tipo no necesita heredar de ningún otro tipo

En tercer lugar, el tipo no deriva. cualquier otro tipo

Además de todo lo anterior, se debe cumplir una de las siguientes condiciones

Primero, la instancia del tipo es pequeña (alrededor de 16 bytes o menos). /p>

En segundo lugar, la instancia de tipo es grande, pero no tan grande. Los parámetros del método no son devueltos por el método

Cuando se sabe cuándo debe definirse como. tipo de valor; de lo contrario, naturalmente puede definirlo como tipo de referencia

.