Estructuras y clases (Visual Basic)

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 aspectos siguientes:

  • 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 y Public otro Private .

  • Ambos pueden implementar interfaces.

  • Ambos pueden tener constructores compartidos, con o sin parámetros.

  • Ambos pueden exponer una propiedad predeterminada, siempre que esa 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 detalles:

  • 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 hace un tipo de clase.

  • Las estructuras usan la asignación de pila; Las clases usan la asignación de montón.

  • Todos los elementos de estructura son de forma predeterminada; las variables de clase y las constantes son de forma predeterminada, mientras que otros miembros Public de clase son de forma Private Public predeterminada. Este comportamiento para los miembros de clase proporciona compatibilidad con el 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 personal; una clase puede estar completamente vacía.

  • Los elementos structure no se pueden declarar como Protected ; los miembros de clase pueden.

  • Un procedimiento de estructura solo puede controlar eventos si es un procedimiento compartido y solo por medio de la Sub instrucción AddHandler; cualquier procedimiento de clase puede controlar eventos mediante la palabra clave Handles o la AddHandler instrucción . Para 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 variable de clase pueden.

  • Las estructuras heredan implícitamente de la clase y no pueden heredar de ningún otro tipo; las clases pueden heredar de System.ValueType cualquier clase o clase que no sea System.ValueType .

  • Las estructuras no son heredables; Las clases son.

  • Las estructuras nunca finalizan, por lo que Common Language Runtime (CLR) nunca llama al método en ninguna estructura; el recolector de elementos no utilizados (GC) finaliza las clases, que llama a en una clase cuando detecta que no quedan referencias Finalize Finalize 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 se 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 a Dim s As struct1 = New struct1() .

  • Asignar variables. Cuando se asigna una variable de estructura a otra o se pasa una instancia de estructura a un argumento de procedimiento, los valores actuales de todos los elementos de la variable se copian en la nueva estructura. Cuando se asigna una variable de objeto a otra o se pasa una variable de objeto a un procedimiento, solo se copia el puntero de referencia.

  • Asignación de 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 una variable de objeto en , la desasocia de cualquier instancia de clase y no puede acceder a ningún miembro a través de la variable hasta que le asigne otra Nothing instancia.

  • Varias instancias. Una variable de objeto puede tener distintas 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 ellos 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 se deben realizar con una prueba de elemento a elemento. Se pueden comparar dos variables de objeto mediante el Equals método . Equals indica si las dos variables apuntan a la misma instancia.

Vea también