Structure (Instrucción)Structure Statement

Declara el nombre de una estructura e introduce la definición de las variables, propiedades, eventos y procedimientos que la estructura incluye.Declares the name of a structure and introduces the definition of the variables, properties, events, and procedures that the structure comprises.

SintaxisSyntax

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

ElementosParts

TérminoTerm DefiniciónDefinition
attributelist Opcional.Optional. Consulte lista de los atributos.See Attribute List.
accessmodifier Opcional.Optional. Puede ser uno de los siguientes:Can be one of the following:

- Public- Public
- protegido- Protected
- Friend- Friend
- privado- Private
- Protected Friend- Protected Friend
- Private protegida- Private Protected

Vea Access levels in Visual Basic.See Access levels in Visual Basic.
Shadows Opcional.Optional. Consulte sombras.See Shadows.
Partial Opcional.Optional. Indica una definición parcial de la estructura.Indicates a partial definition of the structure. Consulte parcial.See Partial.
name Obligatorio.Required. Nombre de esta estructura.Name of this structure. Vea Declared Element Names.See Declared Element Names.
Of Opcional.Optional. Especifica que se trata de una estructura genérica.Specifies that this is a generic structure.
typelist Obligatorio si se usa el de palabra clave.Required if you use the Of keyword. Lista de parámetros de tipo de esta estructura.List of type parameters for this structure. Consulte escriba lista.See Type List.
Implements Opcional.Optional. Indica que esta estructura implementa los miembros de una o más interfaces.Indicates that this structure implements the members of one or more interfaces. Consulte implementa instrucción.See Implements Statement.
interfacenames Es obligatorio si se utiliza la instrucción Implements.Required if you use the Implements statement. Nombres de las interfaces implementadas por esta estructura.The names of the interfaces this structure implements.
datamemberdeclarations Obligatorio.Required. Cero o más Const, Dim, Enum, o Event instrucciones declarar los miembros de datos de la estructura.Zero or more Const, Dim, Enum, or Event statements declaring data members of the structure.
methodmemberdeclarations Opcional.Optional. Cero o más declaraciones de Function, Operator, Property, o Sub procedimientos, que actúan como miembros del método de la estructura.Zero or more declarations of Function, Operator, Property, or Sub procedures, which serve as method members of the structure.
End Structure Obligatorio.Required. Termina la definición de Structure.Terminates the Structure definition.

ComentariosRemarks

La instrucción Structure define un tipo de valor compuesto que se puede personalizar.The Structure statement defines a composite value type that you can customize. Un estructura es una generalización del tipo definido por el usuario (UDT) de las versiones anteriores de Visual Basic.A structure is a generalization of the user-defined type (UDT) of previous versions of Visual Basic. Para obtener más información, consulte estructuras.For more information, see Structures.

Las estructuras admiten muchas de las mismas características que las clases.Structures support many of the same features as classes. Por ejemplo, las estructuras pueden tener propiedades y procedimientos, pueden implementar interfaces y pueden tener constructores con parámetros.For example, structures can have properties and procedures, they can implement interfaces, and they can have parameterized constructors. No obstante, existen diferencias importantes entre las estructuras y las clases en materias como la herencia, las declaraciones y la utilización.However, there are significant differences between structures and classes in areas such as inheritance, declarations, and usage. Además, las clases son tipos de referencia y las estructuras son tipos de valor.Also, classes are reference types and structures are value types. Para obtener más información, consulte estructuras y clases.For more information, see Structures and Classes.

Structure solo se puede utilizar en un espacio de nombres o un nivel de módulo.You can use Structure only at namespace or module level. Esto significa que el contexto de declaración para una estructura 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.This means the declaration context for a structure must be a source file, namespace, class, structure, module, or interface, and cannot be a procedure or block. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).For more information, see Declaration Contexts and Default Access Levels.

De forma predeterminada las estructuras Friend acceso.Structures default to Friend access. Los niveles de acceso se pueden ajustar con los modificadores de acceso.You can adjust their access levels with the access modifiers. Para obtener más información, consulte tener acceso a los niveles en Visual Basic.For more information, see Access levels in Visual Basic.

ReglasRules

  • Anidamiento.Nesting. Puede definirse una estructura dentro de otra.You can define one structure within another. La estructura exterior se denomina la que contiene la estructura, y la estructura interna se denomina un anidada de estructura.The outer structure is called the containing structure, and the inner structure is called a nested structure. Sin embargo, no se puede tener acceso a los miembros de una estructura anidada a través de la estructura contenedora.However, you cannot access a nested structure's members through the containing structure. En lugar de ello, se debe declarar una variable del tipo de datos de la estructura anidada.Instead, you must declare a variable of the nested structure's data type.

  • Declaración de miembro.Member Declaration. Se debe declarar cada miembro de una estructura.You must declare every member of a structure. No puede ser un miembro de estructura Protected o Protected Friend porque puede heredar nada de una estructura.A structure member cannot be Protected or Protected Friend because nothing can inherit from a structure. La propia estructura, sin embargo, puede ser de tipo Protected o Protected Friend.The structure itself, however, can be Protected or Protected Friend.

    En una estructura se pueden declarar cero o más variables no compartidas o eventos no compartidos y no personalizados.You can declare zero or more nonshared variables or nonshared, noncustom events in a structure. No pueden utilizarse únicamente constantes, propiedades y procedimientos, aunque algunos sean no compartidos.You cannot have only constants, properties, and procedures, even if some of them are nonshared.

  • Inicialización.Initialization. No se puede inicializar el valor de ningún miembro de datos de una estructura no compartido como parte de su declaración.You cannot initialize the value of any nonshared data member of a structure as part of its declaration. 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.You must either initialize such a data member by means of a parameterized constructor on the structure, or assign a value to the member after you have created an instance of the structure.

  • Herencia.Inheritance. Una estructura no puede heredar de ningún tipo distinto de ValueType, del que todas las estructuras heredan.A structure cannot inherit from any type other than ValueType, from which all structures inherit. En particular, una estructura no puede heredar de otra.In particular, one structure cannot inherit from another.

    No puede usar el Inherits Statement en una definición de estructura, ni siquiera para especificar ValueType.You cannot use the Inherits Statement in a structure definition, even to specify ValueType.

  • Implementación de.Implementation. Si usa la estructura de la instrucción Implements, debe implementar cada miembro definido por cada interfaz que se especifique en interfacenames.If the structure uses the Implements Statement, you must implement every member defined by every interface you specify in interfacenames.

  • Propiedad predeterminada.Default Property. Una estructura puede especificar a lo sumo una propiedad como su propiedad predeterminada, usando la predeterminada modificador.A structure can specify at most one property as its default property, using the Default modifier. Para obtener más información, consulte predeterminado.For more information, see Default.

ComportamientoBehavior

  • Nivel de acceso.Access Level. En una estructura, cada miembro se puede declarar con su propio nivel de acceso.Within a structure, you can declare each member with its own access level. De forma predeterminada todos los miembros de estructura pública acceso.All structure members default to Public access. 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.Note that if the structure itself has a more restricted access level, this automatically restricts access to its members, even if you adjust their access levels with the access modifiers.

  • Ámbito.Scope. Una estructura está en ámbito en su espacio de nombres, clase, estructura o módulo contenedores.A structure is in scope throughout its containing namespace, class, structure, or module.

    El ámbito de todos los miembros de la estructura es la estructura completa.The scope of every structure member is the entire structure.

  • Duración.Lifetime. Una estructura no dispone por sí misma de período de duración.A structure does not itself have a lifetime. Más bien, cada instancia de esa estructura tiene un período de duración independiente de todas las demás instancias.Rather, each instance of that structure has a lifetime independent of all other instances.

    La duración de una instancia comienza cuando se crea un nuevo operador cláusula.The lifetime of an instance begins when it is created by a New Operator clause. Finaliza cuando finaliza el período de duración de la variable que la contiene.It ends when the lifetime of the variable that holds it ends.

    No puede extender el período de duración de una instancia de estructura.You cannot extend the lifetime of a structure instance. Los módulos proporcionan una aproximación a la funcionalidad de estructura estática.An approximation to static structure functionality is provided by a module. Para obtener más información, consulte Module (instrucción).For more information, see Module Statement.

    Los miembros de estructura disponen de un período de duración en función de cómo y donde se declaran.Structure members have lifetimes depending on how and where they are declared. Para obtener más información, vea "Duración" en Class (instrucción).For more information, see "Lifetime" in Class Statement.

  • Calificación.Qualification. El código que se incluye fuera de una estructura debe calificar el nombre de un miembro con el nombre de dicha estructura.Code outside a structure must qualify a member's name with the name of that structure.

    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.If code inside a nested structure makes an unqualified reference to a programming element, Visual Basic searches for the element first in the nested structure, then in its containing structure, and so on out to the outermost containing element. Para obtener más información, consulta References to Declared Elements.For more information, see References to Declared Elements.

  • Consumo de memoria.Memory Consumption. 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.As with all composite data types, you cannot safely calculate the total memory consumption of a structure by adding together the nominal storage allocations of its members. Es más, no puede suponerse que el orden de almacenamiento en memoria sea el mismo que el orden de la declaración.Furthermore, you cannot safely assume that the order of storage in memory is the same as your order of declaration. Si necesita controlar el diseño de almacenamiento de una estructura, puede aplicar el atributo StructLayoutAttribute a la instrucción Structure.If you need to control the storage layout of a structure, you can apply the StructLayoutAttribute attribute to the Structure statement.

EjemploExample

En el siguiente ejemplo se utiliza la instrucción Structure para definir un conjunto de datos relacionados de un empleado.The following example uses the Structure statement to define a set of related data for an employee. Se muestra el uso de los miembros Public, Friend y Private para reflejar la confidencialidad de los elementos de datos.It shows the use of Public, Friend, and Private members to reflect the sensitivity of the data items. También se muestran los miembros de evento, propiedad y procedimiento.It also shows procedure, property, and event members.

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énSee also