Structure (Instrucción)
Declara el nombre de una estructura e introduce la definición de las variables, propiedades, eventos y procedimientos que la estructura incluye.
Sintaxis
[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
[ Implements interfacenames ]
[ datamemberdeclarations ]
[ methodmemberdeclarations ]
End Structure
Partes
| Término | Definición |
|---|---|
attributelist |
Opcional. Vea Lista de atributos. |
accessmodifier |
Opcional. Puede ser uno de los siguientes: - Público - Protegido - Amigo - Privado - Protected Friend - Private Protected Vea Niveles de acceso en Visual Basic. |
Shadows |
Opcional. Vea Sombras. |
Partial |
Opcional. Indica una definición parcial de la estructura. Vea Partial. |
name |
Necesario. Nombre de esta estructura. Vea Declared Element Names. |
Of |
Opcional. Especifica que se trata de una estructura genérica. |
typelist |
Obligatorio si usa la palabra clave Of. Lista de parámetros de tipo de esta estructura. Vea Lista de tipos. |
Implements |
Opcional. Indica que esta estructura implementa los miembros de una o más interfaces. Vea Implements (Instrucción). |
interfacenames |
Es obligatorio si se utiliza la instrucción Implements. Nombres de las interfaces implementadas por esta estructura. |
datamemberdeclarations |
Necesario. Cero o más Const instrucciones , , o que Dim Enum Event declaran miembros de datos de la estructura . |
methodmemberdeclarations |
Opcional. Cero o más declaraciones de Function procedimientos Operator , , o , que sirven como miembros de Property método de la estructura Sub . |
End Structure |
Necesario. Termina la definición de Structure. |
Comentarios
La instrucción Structure define un tipo de valor compuesto que se puede personalizar. Una estructura es una generalización del tipo definido por el usuario (UDT) de versiones anteriores de Visual Basic. Para obtener más información, vea Estructuras.
Las estructuras admiten muchas de las mismas características que las clases. Por ejemplo, las estructuras pueden tener propiedades y procedimientos, pueden implementar interfaces y pueden tener constructores con parámetros. No obstante, existen diferencias importantes entre las estructuras y las clases en materias como la herencia, las declaraciones y la utilización. Además, las clases son tipos de referencia y las estructuras son tipos de valor. Para obtener más información, vea Estructuras y clases.
Structure solo se puede utilizar en un espacio de nombres o un nivel de módulo. Esto significa que el contexto de declaración de una estructura debe ser un archivo de origen, un espacio de nombres, una clase, una estructura, un módulo o una interfaz, y no puede ser un procedimiento o un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).
Las estructuras tienen como valor predeterminado acceso de confianza. Los niveles de acceso se pueden ajustar con los modificadores de acceso. Para obtener más información, vea Niveles de acceso en Visual Basic.
Reglas
Anidación. Puede definirse una estructura dentro de otra. La estructura externa se denomina estructura que contiene y la estructura interna se denomina estructura anidada. Sin embargo, no se puede tener acceso a los miembros de una estructura anidada a través de la estructura contenedora. En lugar de ello, se debe declarar una variable del tipo de datos de la estructura anidada.
Declaración de miembros. Se debe declarar cada miembro de una estructura. Un miembro de estructura no puede ser Protegido o porque nada
Protected Friendpuede heredar de una estructura. La propia estructura, sin embargo, puede ser de tipoProtectedoProtected Friend.En una estructura se pueden declarar cero o más variables no compartidas o eventos no compartidos y no personalizados. No pueden utilizarse únicamente constantes, propiedades y procedimientos, aunque algunos sean no compartidos.
Inicialización. No se puede inicializar el valor de ningún miembro de datos de una estructura no compartido como parte de su declaración. Dicho miembro de datos se debe inicializar mediante un constructor con parámetros en la estructura o bien mediante la asignación de un valor al miembro después de crear una instancia de la estructura.
Herencia. Una estructura no puede heredar de ningún tipo distinto de ValueType, del que todas las estructuras heredan. En particular, una estructura no puede heredar de otra.
No se puede usar la instrucción Inherits en una definición de estructura, ni siquiera para especificar ValueType .
Implementación. Si la estructura usa la instrucción Implements, debe implementar todos los miembros definidos por cada interfaz que especifique en
interfacenames.Propiedad predeterminada. Una estructura puede especificar como máximo una propiedad como su propiedad predeterminada, mediante el modificador Default. Para obtener más información, vea Default.
Comportamiento
Nivel de acceso. En una estructura, cada miembro se puede declarar con su propio nivel de acceso. Todos los miembros de la estructura tienen como valor predeterminado acceso público. Tenga en cuenta que si la propia estructura utiliza un nivel de acceso más limitado, se restringe automáticamente el acceso a sus miembros, aunque los niveles de acceso se ajusten con modificadores.
Ámbito. Una estructura está en ámbito en su espacio de nombres, clase, estructura o módulo contenedores.
El ámbito de todos los miembros de la estructura es la estructura completa.
Vida. Una estructura no dispone por sí misma de período de duración. Más bien, cada instancia de esa estructura tiene un período de duración independiente de todas las demás instancias.
La duración de una instancia comienza cuando se crea mediante una cláusula New Operator. Finaliza cuando finaliza el período de duración de la variable que la contiene.
No puede extender el período de duración de una instancia de estructura. Los módulos proporcionan una aproximación a la funcionalidad de estructura estática. Para obtener más información, vea Module Statement.
Los miembros de estructura disponen de un período de duración en función de cómo y donde se declaran. Para obtener más información, vea "Lifetime" en Class Statement.
Calificación. El código que se incluye fuera de una estructura debe calificar el nombre de un miembro con el nombre de dicha estructura.
Si el código incluido en una estructura anidada realiza una referencia sin calificar a un elemento de programación, Visual Basic busca este elemento en la estructura anidada en primer lugar, a continuación en la estructura contenedora y así sucesivamente hasta el elemento contenedor principal. Para obtener más información, consulta References to Declared Elements.
Consumo de memoria. Al igual que sucede con los demás tipos de datos compuestos, no puede calcularse de forma precisa el consumo total de memoria de una estructura sumando las asignaciones de almacenamiento nominal de sus miembros. Es más, no puede suponerse que el orden de almacenamiento en memoria sea el mismo que el orden de la declaración. Si necesita controlar el diseño de almacenamiento de una estructura, puede aplicar el atributo StructLayoutAttribute a la instrucción
Structure.
Ejemplo
En el siguiente ejemplo se utiliza la instrucción Structure para definir un conjunto de datos relacionados de un empleado. Se muestra el uso de los miembros Public, Friend y Private para reflejar la confidencialidad de los elementos de datos. También se muestran los miembros de evento, propiedad y procedimiento.
Public Structure employee
' Public members, accessible from throughout declaration region.
Public firstName As String
Public middleName As String
Public lastName As String
' Friend members, accessible from anywhere within the same assembly.
Friend employeeNumber As Integer
Friend workPhone As Long
' Private members, accessible only from within the structure itself.
Private homePhone As Long
Private level As Integer
Private salary As Double
Private bonus As Double
' Procedure member, which can access structure's private members.
Friend Sub CalculateBonus(ByVal rate As Single)
bonus = salary * CDbl(rate)
End Sub
' Property member to return employee's eligibility.
Friend ReadOnly Property Eligible() As Boolean
Get
Return level >= 25
End Get
End Property
' Event member, raised when business phone number has changed.
Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure
Para obtener más información sobre cómo usar Structure s, vea Variable de estructura.