En Visual Basic, los tipos de datos definidos por el usuario ( Type en VB6 o Structure en VB.NET) permiten definir tus propios tipos compuestos, que incluyen múltiples variables de diferentes tipos. Esto es conveniente para empaquetar datos relacionados.
UDTs (VB6):
Type Person Name As String Age As Integer Height As Single End Type Dim employee As Person employee.Name = "Alexey" employee.Age = 32 employee.Height = 1.85
Estructuras (VB.NET):
Structure Person Public Name As String Public Age As Integer Public Height As Single End Structure Dim employee As Person employee.Name = "Alexey"
Cuándo usar:
En contraste: Las clases se utilizan si se necesita encapsulación de lógica, herencia, polimorfismo o implementación de interfaces.
¿Por qué no se pueden asignar valores
Nothinga las estructuras en VB.NET?
Respuesta: Solo a las variables de clase (objetos) se les puede asignar Nothing, ya que almacenan referencias. Las estructuras son value-type, siempre contienen un conjunto de valores; intentar asignar Nothing resultará en un error de compilación.
Dim s As Person = Nothing '¡Error! Las estructuras no pueden ser Nothing (excepto Nullable(Of T))
Historia
En un viejo proyecto, decidieron reemplazar un array de primitivos por una estructura con múltiples campos, pero el nuevo código se volvió inusualmente más lento. Resultó que la estructura era muy grande y se copiaba a menudo en funciones. Si hubieran usado una clase, solo se habrían copiado referencias y no la estructura completa.
Historia
Después de portar UDT de VB6 a VB.NET, uno de los desarrolladores no implementó la interfaz
ISerializablepara la estructura en la llamada remota. Como resultado, el objeto remoto no pudo ser serializado, lo que causó fallos en la comunicación entre procesos.
Historia
En un módulo para trabajar con geometría, la estructura almacenaba referencias a arrays (mutable). Múltiples instancias de esta estructura llevaban a efectos inesperados, ya que las referencias dentro de la estructura apuntaban a los mismos arrays de datos: ¡las mutaciones se reflejaban en todas las copias!