Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Visual Basic unifica la sintaxis de estructuras y clases, con el resultado de que ambas entidades admiten la mayoría de las mismas características. Sin embargo, también hay diferencias importantes entre las estructuras y las clases.
Las clases tienen la ventaja de ser tipos de referencia: pasar una referencia es más eficaz que pasar una variable de estructura con todos sus datos. Por otro lado, las estructuras no requieren la asignación de memoria en el montón global.
Dado que no se puede heredar de una estructura, las estructuras solo se deben usar para los objetos que no necesitan extenderse. Use estructuras cuando el objeto que desea crear tenga un tamaño de instancia pequeño y tenga en cuenta las características de rendimiento de las clases frente a las estructuras.
Similitudes
Las estructuras y clases son similares en los siguientes aspectos:
Ambos son tipos de contenedor , lo que significa que contienen otros tipos como miembros.
Ambos tienen miembros, que pueden incluir constructores, métodos, propiedades, campos, constantes, enumeraciones, eventos y controladores de eventos.
Los miembros de ambos pueden tener niveles de acceso individualizados. Por ejemplo, se puede declarar un miembro como
Public
y otro comoPrivate
.Ambos pueden implementar interfaces.
Ambos pueden tener constructores compartidos, con o sin parámetros.
Ambos pueden exponer una propiedad predeterminada, siempre que la propiedad tome al menos un parámetro.
Ambos pueden declarar y generar eventos, y ambos pueden declarar delegados.
Diferencias
Las estructuras y clases difieren en los siguientes aspectos:
Las estructuras son tipos de valor; Las clases son tipos de referencia. Una variable de un tipo de estructura contiene los datos de la estructura, en lugar de contener una referencia a los datos como un tipo de clase.
Las estructuras usan la asignación de pila; las clases usan la asignación del montón.
Todos los elementos de estructura son
Public
de forma predeterminada; las variables de clase y las constantes sonPrivate
de forma predeterminada, mientras que otros miembros de clase sonPublic
de forma predeterminada. Este comportamiento para los miembros de clase proporciona compatibilidad con el sistema de Visual Basic 6.0 de valores predeterminados.Una estructura debe tener al menos una variable no compartida o un elemento de evento no compartido y no personalizado; una clase puede estar completamente vacía.
Los elementos de estructura no se pueden declarar como
Protected
; los miembros de clase sí pueden.Un procedimiento de estructura solo puede controlar eventos si es un procedimiento Shared
Sub
y solo por medio de la instrucción AddHandler; cualquier procedimiento de clase puede controlar eventos, mediante la palabra clave Handles o laAddHandler
instrucción . Para obtener más información, vea Eventos.Las declaraciones de variables de estructura no pueden especificar inicializadores ni tamaños iniciales para matrices; Las declaraciones de variables de clase pueden.
Las estructuras heredan implícitamente de la System.ValueType clase y no pueden heredar de ningún otro tipo; las clases pueden heredar de cualquier clase o clase que no sea System.ValueType.
Las estructuras no se pueden heredar; las clases sí se pueden heredar.
Las estructuras nunca se terminan, por lo que Common Language Runtime (CLR) nunca llama al método Finalize en ninguna estructura; las clases son finalizadas por el recolector de elementos no utilizados (GC), que llama al método Finalize en una clase cuando detecta que no quedan referencias activas.
Una estructura no requiere un constructor; una clase sí.
Las estructuras solo pueden tener constructores no compartidos si toman parámetros; Las clases pueden tenerlas con o sin parámetros.
Cada estructura tiene un constructor público implícito sin parámetros. Este constructor inicializa todos los elementos de datos de la estructura en sus valores predeterminados. No puede volver a definir este comportamiento.
Instancias y variables
Dado que las estructuras son tipos de valor, cada variable de estructura se enlaza permanentemente a una instancia de estructura individual. Pero las clases son tipos de referencia y una variable de objeto puede hacer referencia a varias instancias de clase en momentos diferentes. Esta distinción afecta al uso de estructuras y clases de las maneras siguientes:
Inicialización. Una variable de estructura incluye implícitamente una inicialización de los elementos mediante el constructor sin parámetros de la estructura. Por lo tanto,
Dim s As struct1
es equivalente aDim s As struct1 = New struct1()
.Asignar variables. Al asignar una variable de estructura a otra, o pasar una instancia de estructura a un argumento de procedimiento, los valores actuales de todos los elementos de variable se copian en la nueva estructura. Cuando asigna una variable de objeto a otra o pasa una variable de objeto a un procedimiento, solo se copia el puntero de referencia.
Asignación del valor Nothing. Puede asignar el valor Nothing a una variable de estructura, pero la instancia sigue estando asociada a la variable . Todavía puede llamar a sus métodos y acceder a sus elementos de datos, aunque la asignación reinicializa los elementos variables.
Por el contrario, si establece la variable de objeto en
Nothing
, se desvinculará de cualquier instancia de clase y no podrá acceder a ningún miembro a través de la variable hasta que le asigne otra instancia.Varias instancias. Una variable de objeto puede tener diferentes instancias de clase asignadas en momentos diferentes y varias variables de objeto pueden hacer referencia a la misma instancia de clase al mismo tiempo. Los cambios realizados en los valores de los miembros de clase afectan a esos miembros cuando se accede a través de otra variable que apunta a la misma instancia.
Sin embargo, los elementos de estructura están aislados dentro de su propia instancia. Los cambios en sus valores no se reflejan en ninguna otra variable de estructura, incluso en otras instancias de la misma
Structure
declaración.Igualdad. Las pruebas de igualdad de dos estructuras deben realizarse con una prueba de elemento por elemento. Se pueden comparar dos variables de objeto mediante el Equals método . Equals indica si las dos variables apuntan a la misma instancia.