Structure (Instrucción)

Actualización: noviembre 2007

Declara el nombre de una estructura e introduce la definición de las variables, propiedades, eventos y procedimientos que incluye la estructura.

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
    [ Implements interfacenames ]
        datamemberdeclarations
    [ methodmemberdeclarations ]
End Structure

Partes

  • attributelist
    Opcional. Vea la Lista de atributos.

  • accessmodifier
    Opcional. Puede ser una de las siguientes:

    Vea Niveles de acceso en Visual Basic.

  • Shadows
    Opcional. Vea Shadows.

  • Partial
    Opcional. Indica una definición parcial de la estructura. Vea Partial (Visual Basic).

  • name
    Obligatorio. Nombre de esta estructura. Vea Nombres de elementos declarados.

  • Of
    Opcional. Especifica que se trata de una estructura genérica.

  • typelist
    Es obligatorio si se utiliza la palabra clave Of. Lista de parámetros de tipo de esta estructura. Vea la 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
    Obligatorio. Una o varias instrucciones Const, Dim, Enum o Event que declaran miembros de datos de la estructura.

  • methodmemberdeclarations
    Opcional. Cero o más declaraciones de los procedimientos Function, Operator, Property o Sub que sirven como miembros del método de la estructura.

  • End Structure
    Obligatorio. Termina la definición Structure.

Comentarios

La instrucción Structure define un tipo de valor compuesto que se puede personalizar. Una estructura es una generalización de un tipo definido por el usuario de versiones anteriores de Visual Basic. Para obtener más información, vea Estructuras: tipos de datos propios.

Las estructuras admiten muchas de las mismas características como clases. Por ejemplo, las estructuras pueden tener propiedades y procedimientos, pueden implementar interfaces y pueden tener constructores con parámetros. No obstante, existen diferencias de consideración 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.

Sólo puede utilizar Structure en un espacio de nombres o un nivel de módulo. Esto significa que el contexto de la declaración para una enumeración debe ser un archivo de código fuente, espacio de nombres, clase, estructura, módulo o interfaz y no puede ser un procedimiento o bloque. Para obtener más información, vea Contextos de declaración y niveles de acceso predeterminados.

De manera predeterminada, el acceso a las estructuras es de tipo Friend (Visual Basic). Puede ajustar sus niveles de acceso con los modificadores de acceso. Para obtener más información, vea Niveles de acceso en Visual Basic.

Reglas

  • Anidado. Puede definir una estructura dentro de otra. La estructura exterior se denomina estructura contenedora y la interna estructura anidada. Sin embargo, no puede tener acceso a los miembros de una estructura anidada a través de la estructura contenedora. En lugar de ello, debe declarar una variable del tipo de datos de la estructura anidada.

  • Declaración de miembros Debe declarar cada miembro de una estructura. Los miembros de una estructura no pueden ser de tipo Protected ni Protected Friend ya que no se puede heredar de una estructura. La propia estructura, sin embargo, puede ser de tipo Protected o Protected Friend.

    Debe declarar al menos una variable no compartida o un evento no compartido y no personalizado en una estructura. 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 no compartido de una estructura 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 puede utilizar Inherits (Instrucción) en una definición de estructura, incluso si es para especificar ValueType.

  • Implementación. Si la estructura utiliza Implements (Instrucción), debe implementar cada miembro definido por cada interfaz que especifica en interfacenames.

  • Propiedad Default. Una estructura puede especificar a lo sumo una propiedad como su propiedad predeterminada, con el modificador Default (Visual Basic) Para obtener más información, vea Propiedades predeterminadas.

Comportamiento

  • Nivel de acceso. En una estructura, puede declarar cada miembro con su propio nivel de acceso. El acceso predeterminado de todos los miembros de la estructura es de tipo Public (Visual Basic). Si la propia estructura utiliza un nivel de acceso más limitado, se restringe automáticamente el acceso a sus miembros, aunque ajuste sus niveles de acceso con los modificadores.

  • Ámbito. Una estructura está en ámbito en su espacio de nombres contenedor, clase, estructura o módulo.

    El ámbito de todos los miembros de la estructura es la estructura completa.

  • Período de duración. 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.

    El período de duración de una instancia comienza cuando se crea con una cláusula New (Visual Basic). 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 (Instrucción).

    Los miembros de estructura disponen de período de duración en función de cómo y donde se declaran. Para obtener más información, vea el apartado sobre períodos de duración en Instrucción Class (Visual Basic).

  • 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, vea Resolver una referencia cuando muchas variables tienen el mismo nombre.

  • Consumo de memoria. Como en 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 la 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

Vea también

Tareas

Cómo: Convertir un tipo definido por el usuario en una estructura de Visual Basic

Conceptos

Estructuras y clases

Recomendación de actualización: evitar matrices y cadenas de longitud fija en tipos definidos por el usuario

Referencia

Instrucción Class (Visual Basic)

Instrucción Interface (Visual Basic)

Module (Instrucción)

Instrucción Dim (Visual Basic)

Instrucción Const (Visual Basic)

Instrucción Enum (Visual Basic)

Event (Instrucción)

Operator (Instrucción)

Property (Instrucción)