Instrução Structure

Declara o nome de uma estrutura e introduz a definição de variáveis, propriedades, eventos e procedimentos que a estrutura compacta.

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

Partes

Termo

Definição

attributelist

Opcional. Consulte a Lista de Atributos.

accessmodifier

Opcional. Pode ser um dos seguintes:

Consulte Níveis de acesso no Visual Basic.

Shadows

Opcional. Consulte Sombras.

Partial

Opcional. Indica uma definição parcial da estrutura. Consulte Parcial (Visual Basic).

name

Obrigatório. Nome dessa estrutura. Consulte Nomes de elemento declarados (Visual Basic).

Of

Opcional. Especifica que essa é uma estrutura genérica.

typelist

Necessário se usar a palavra-chave Of. Lista de parâmetros de tipo para essa estrutura. Consulte a Lista de Tipos.

Implements

Opcional. Indica que essa estrutura implementa os membros de uma ou mais interfaces. Consulte Instrução Implements.

interfacenames

Necessário se usar a declaração Implements. Os nomes das interfaces que essa estrutura implementa.

datamemberdeclarations

Obrigatório. Zero ou mais declarações de Const, Dim, Enum ou Event estão declarando membros de dados da estrutura.

methodmemberdeclarations

Opcional. Zero ou mais declarações de procedimentos Function, Operator, Property ou Sub, que servem como membros de método da estrutura.

End Structure

Obrigatório. Finaliza a definição Structure.

Comentários

A declaração Structure define um tipo de valor composto que pode ser personalizado. Uma estrutura é uma generalização do tipo definido pelo usuário (TDU) de versões anteriores do Visual Basic. Para obter mais informações, consulte Estruturas (Visual Basic).

As estruturas oferecem suportem a alguns recursos como classes. Por exemplo, estruturas podem ter propriedades e procedimentos, podem implementar interfaces e ter construtores parametrizados. Entretanto, existem diferenças significativas entre estruturas e classes em áreas como herança, declarações e utilização. Além disso, classes são tipos de referência e as estruturas são tipos de valor. Para obter mais informações, consulte Estruturas e classes (Visual Basic).

Só é possível usar Structure em nível de namespace ou módulo. Isso significa que o contexto da declaração de uma estrutura deve ser um arquivo de origem, namespace, classe, estrutura, módulo ou interface e não pode ser um procedimento ou bloco. Para obter mais informações, consulte Contextos de declaração e níveis de acesso padrão (Visual Basic).

O padrão para estruturas é o acesso Friend (Visual Basic). É possível ajustar seus níveis de acesso com os modificadores de acesso. Para obter mais informações, consulte Níveis de acesso no Visual Basic.

Regras

  • Aninhamento. É possível definir uma estrutura dentro de outra. A estrutura externa é chamada de estrutura contida e a estrutura interna é chamada de estrutura aninhada. Entretanto, não é possível acessar membros de uma estrutura aninhada através da estrutura contida Em vez disso, você deve declarar uma variável do tipo de dados da estrutura aninhada.

  • Declaração de Membro. Você deve declarar cada membro de uma estrutura. O membro de uma estrutura não pode ser ProtegidoouProtected Friend, pois nada pode ser herdado de uma estrutura. Entretanto, a estrutura em si pode ser Protected ou Protected Friend.

    Você pode declarar zero ou mais variáveis não compartilhadas, ou eventos não compartilhados, não personalizados em uma estrutura. Não é possível ter apenas constantes, propriedades e procedimentos, mesmo que alguns deles não sejam compartilhados.

  • Inicialização. Não é possível inicializar o valor de qualquer membro de dados não compartilhado de uma estrutura como parte de sua declaração. Você deve inicializar tal membro de dado através de um construtor parametrizado na estrutura ou atribuir um valor ao membro depois de ter criado uma instância da estrutura.

  • Herança. Uma estrutura não pode herdar de qualquer tipo que não seja ValueType, da qual todas as estruturas são herdadas. Em particular, uma estrutura não pode ser herdada de outra.

    Não é possível usar Instrução Inherits em uma definição de estrutura, mesmo que seja para especificar ValueType.

  • Implementação. Se a estrutura usar o Instrução Implements, será necessário implementar todos os membros definidos em cada interface que você especificar em interfacenames.

  • Propriedade Padrão. Uma estrutura pode especificar no máximo uma propriedade como sua propriedade padrão, usando o modificador Padrão (Visual Basic). Para obter mais informações, consulte Padrão (Visual Basic).

Comportamento

  • Nível de Acesso. Dentro de uma estrutura, é possível declarar cada membro com seu próprio nível de acesso. Todos membros de estrutura tem como padrão o acesso Público (Visual Basic). Observe que se a própria estrutura tiver mais de um nível de acesso restrito, isso restringe automaticamente o acesso aos seus membros, mesmo que você ajuste seus níveis de acesso com os modificadores de acesso.

  • Escopo. Uma estrutura é totalmente seu namespace, classe, estrutura ou módulo contido.

    O escopo de cada membro de estrutura é a estrutura inteira.

  • Tempo de vida. Uma estrutura não tem um tempo de vida próprio. Por sua vez, cada instância dessa estrutura tem um tempo de vida independente de todas as outras instâncias.

    O tempo de vida de uma instância se inicia quando ela é criada por uma cláusula Operador New (Visual Basic). É finalizada quando o termina tempo de vida da variável que a armazena.

    Não é possível estender o tempo de vida de uma instância de estrutura. É fornecida uma aproximação da estrutura estática por um módulo. Para obter mais informações, consulte Instrução Module.

    Os membros de estrutura têm tempos de vida que dependem de como e onde eles foram declarados. Para obter mais informações, consulte "Tempo de Vida" em Instrução Class (Visual Basic).

  • Habilitação. O código exterior a uma estrutura deve qualificar o nome de um membro como o nome da estrutura.

    Se um código dentro de uma estrutura aninhada fizer referência não qualificada a um elemento de programação, o Visual Basic procura esse elemento primeiramente na estrutura aninhada, em seguida, na sua estrutura contida e assim por diante, até o elemento contido mais externo. Para obter mais informações, consulte Referências a elementos declarados (Visual Basic).

  • Consumo de Memória. Assim como com todos os tipos de dado compostos, não é possível calcular com segurança o consumo total de memória ao se adicionar as alocações de armazenamento nominais de seus membros. Além disso, você não pode assumir, com segurança, que a ordem de armazenamento em memória é a mesma das suas declarações. Se for necessário controlar o layout do armazenamento de uma estrutura, você poderá aplicar o atributo StructLayoutAttribute à instrução Structure.

Exemplo

O exemplo a seguir usa a instrução Structure para definir um conjunto de dados relacionados para um funcionário. É mostrado o uso de membros Public, Friend e Private para refletir a sensibilidade dos itens de dados. Também são exibidos membros de evento, propriedade e procedimento

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

Consulte também

Referência

Instrução Class (Visual Basic)

Instrução Interface (Visual Basic)

Instrução Module

Instrução Dim (Visual Basic)

Instrução Const (Visual Basic)

Instrução Enum (Visual Basic)

Instrução Event

Instrução Operator

Instrução Property

Conceitos

Estruturas e classes (Visual Basic)