Compartir a través de


Instrucción Structure

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

Sintaxis

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

Partes

Término Definición
attributelist Opcional. Consulte Lista de atributos.
accessmodifier Opcional. Puede ser uno de los siguientes:

- Público
- Protegido
- Amigo
- Privado
- Amigo protegido
- Protegido privado

Consulte Niveles de acceso en Visual Basic.
Shadows Opcional. Vea Sombras.
Partial Opcional. Indica una definición parcial de la estructura. Consulte Parcial.
name Obligatorio. Nombre de esta estructura. Vea Nombres de elementos declarados.
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 para esta estructura. Consulte Lista de tipos.
Implements Opcional. Indica que esta estructura implementa los miembros de una o varias interfaces. Consulte Implements (Instrucción) .
interfacenames Obligatorio si usa la Implements instrucción . Los nombres de las interfaces que implementa esta estructura.
datamemberdeclarations Obligatorio. Cero o más Constinstrucciones , Dim, Enumo Event que declaran miembros de datos de la estructura.
methodmemberdeclarations Opcional. Cero o más declaraciones de Functionprocedimientos , Operator, Propertyo Sub , que actúan como miembros del método de la estructura.
End Structure Obligatorio. Finaliza la Structure definición.

Observaciones

La Structure instrucción define un tipo de valor compuesto que 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 parametrizados. Sin embargo, hay diferencias significativas entre estructuras y clases en áreas como herencia, declaraciones y uso. Además, las clases son tipos de referencia y estructuras son tipos de valor. Para obtener más información, vea Estructuras y clases.

Solo puede usar Structure en el nivel de espacio de nombres o 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 bloque. Para obtener más información, vea Contextos de declaración y Niveles de acceso predeterminados.

Las estructuras tienen como valor predeterminado el acceso friend . 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

  • Nidificación. Puede definir una estructura dentro de otra. La estructura externa se denomina estructura contenedora y la estructura interna se denomina estructura anidada. Sin embargo, no se puede acceder a los miembros de una estructura anidada a través de la estructura contenedora. En su lugar, debe declarar una variable del tipo de datos de la estructura anidada.

  • Declaración de miembro. Debe declarar todos los miembros de una estructura. Un miembro de estructura no puede estar protegido o Protected Friend porque nada puede heredar de una estructura. Sin embargo, la propia estructura puede ser Protected o Protected Friend.

    Puede declarar cero o más variables no compartidas o eventos no compartidos y no compartidos en una estructura. No puede tener solo constantes, propiedades y procedimientos, incluso si algunos de ellos no están 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. Debe inicializar dicho miembro de datos mediante un constructor con parámetros en la estructura o asignar un valor al miembro después de haber creado una instancia de la estructura.

  • Herencia. Una estructura no puede heredar de ningún tipo distinto ValueTypede , desde el que heredan todas las estructuras. En concreto, una estructura no puede heredar de otra.

    No puede usar la instrucción Inherits en una definición de estructura, incluso 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, consulte Valor predeterminado.

Comportamiento

  • Nivel de entrada. Dentro de una estructura, puede declarar cada miembro con su propio nivel de acceso. Todos los miembros de la estructura tienen acceso público de forma predeterminada. Tenga en cuenta que si la propia estructura tiene un nivel de acceso más restringido, esto restringe automáticamente el acceso a sus miembros, incluso si ajusta sus niveles de acceso con los modificadores de acceso.

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

    El ámbito de cada miembro de estructura es toda la estructura.

  • Toda la vida. Una estructura no tiene una duración. En su lugar, cada instancia de esa estructura tiene una 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 la duración de la variable que lo contiene.

    No se puede extender la duración de una instancia de estructura. Un módulo proporciona una aproximación a la funcionalidad de estructura estática. Para obtener más información, vea Module Statement.

    Los miembros de la estructura tienen duraciones en función de cómo y dónde se declaran. Para obtener más información, vea "Duración" en la instrucción class.

  • Calificación. El código fuera de una estructura debe calificar el nombre de un miembro con el nombre de esa estructura.

    Si el código dentro de una estructura anidada hace una referencia no completa a un elemento de programación, Visual Basic busca el elemento primero en la estructura anidada, en su estructura contenedora, etc. hasta el elemento contenedor más externo. Para obtener más información, vea Referencias a elementos declarados.

  • Consumo de memoria. Al igual que con todos los tipos de datos compuestos, no se puede calcular de forma segura el consumo total de memoria de una estructura agregando las asignaciones de almacenamiento nominal de sus miembros. Además, no puede suponer de forma segura que el orden de almacenamiento en memoria es el mismo que el orden de declaración. Si necesita controlar el diseño de almacenamiento de una estructura, puede aplicar el StructLayoutAttribute atributo a la Structure instrucción .

Ejemplo

En el ejemplo siguiente se usa la Structure instrucción para definir un conjunto de datos relacionados para un empleado. Muestra el uso de Publiclos miembros , Friendy Private para reflejar la confidencialidad de los elementos de datos. También muestra los miembros de procedimiento, propiedad y evento.

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 Structures, vea Variable de estructura.

Consulte también