Declaração de estrutura

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

Sintaxe

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

Partes

Termo Definição
attributelist Opcional. Consulte Lista de Atributos.
accessmodifier Opcional. Pode ser um dos seguintes:

- Público
- Protegido
- Amigo
- Privado
- Amigo Protegido
- Privado Protegido

Consulte Níveis de acesso no Visual Basic.
Shadows Opcional. Veja Sombras.
Partial Opcional. Indica uma definição parcial da estrutura. Ver Parcial.
name Obrigatório. Nome desta estrutura. Consulte Nomes de elementos declarados.
Of Opcional. Especifica que esta é uma estrutura genérica.
typelist Obrigatório se você usar a palavra-chave Of . Lista de parâmetros de tipo para esta estrutura. Consulte Lista de tipos.
Implements Opcional. Indica que essa estrutura implementa os membros de uma ou mais interfaces. Consulte Declaração de implementos.
interfacenames Obrigatório se você usar a Implements declaração. Os nomes das interfaces que esta estrutura implementa.
datamemberdeclarations Obrigatório. Zero ou mais Const, Dim, Enum, ou Event instruções que declarem os dados membros da estrutura.
methodmemberdeclarations Opcional. Zero ou mais declarações de Function, Operator, Property, ou Sub procedimentos, que servem como membros do método da estrutura.
End Structure Obrigatório. Encerra a Structure definição.

Observações

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

As estruturas suportam muitos dos mesmos recursos que as classes. Por exemplo, as estruturas podem ter propriedades e procedimentos, podem implementar interfaces e podem ter construtores parametrizados. No entanto, existem diferenças significativas entre estruturas e classes em áreas como herança, declarações e uso. Além disso, as classes são tipos de referência e as estruturas são tipos de valor. Para obter mais informações, consulte Estruturas e classes.

Você pode usar Structure somente no nível de namespace ou módulo. Isso significa que o contexto da declaração para 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.

Estruturas padrão para acesso de amigo . Você pode 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. Você pode definir uma estrutura dentro de outra. A estrutura externa é chamada de estrutura de contenção, e a estrutura interna é chamada de estrutura aninhada. No entanto, você não pode acessar os membros de uma estrutura aninhada por meio da estrutura de contenção. Em vez disso, você deve declarar uma variável do tipo de dados da estrutura aninhada.

  • Declaração de Membro. Você deve declarar todos os membros de uma estrutura. Um membro da estrutura não pode ser protegido ou Protected Friend porque nada pode herdar de uma estrutura. A estrutura em si, no entanto, pode ser Protected ou Protected Friend.

    Você pode declarar zero ou mais variáveis não compartilhadas ou eventos não compartilhados e não personalizados em uma estrutura. Você não pode 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 compartilhados de uma estrutura como parte de sua declaração. Você deve inicializar esse membro de dados por meio 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 nenhum tipo diferente de ValueType, do qual todas as estruturas herdam. Em particular, uma estrutura não pode herdar de outra.

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

  • Implementação. Se a estrutura usa a instrução Implements, você deve implementar cada membro definido por cada interface especificada no interfacenames.

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

Comportamento

  • Nível de Acesso. Dentro de uma estrutura, você pode declarar cada membro com seu próprio nível de acesso. Todos os membros da estrutura usam como padrão Acesso público . Observe que, se a estrutura em si tiver um nível de acesso mais restrito, isso restringe automaticamente o acesso aos seus membros, mesmo que você ajuste seus níveis de acesso com os modificadores de acesso.

  • Âmbito. Uma estrutura está no escopo em todo o seu namespace, classe, estrutura ou módulo.

    O escopo de cada membro da estrutura é toda a estrutura.

  • Duração. Uma estrutura em si não tem uma vida útil. Pelo contrário, 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 começa quando ela é criada por uma cláusula New Operator . Termina quando termina o tempo de vida da variável que o detém.

    Não é possível estender a vida útil de uma instância de estrutura. Uma aproximação à funcionalidade da estrutura estática é fornecida por um módulo. Para obter mais informações, consulte Instrução do módulo.

    Os membros da estrutura têm tempo de vida dependendo de como e onde são declarados. Para obter mais informações, consulte "Tempo de vida" em Declaração de classe.

  • Qualificação. O código fora de uma estrutura deve qualificar o nome de um membro com o nome dessa estrutura.

    Se o código dentro de uma estrutura aninhada faz uma referência não qualificada a um elemento de programação, o Visual Basic procura o elemento primeiro na estrutura aninhada, depois em sua estrutura de contenção e assim por diante para o elemento que contém o elemento mais externo. Para obter mais informações, consulte Referências a elementos declarados.

  • Consumo de memória. Como acontece com todos os tipos de dados compostos, não é possível calcular com segurança o consumo total de memória de uma estrutura somando as alocações nominais de armazenamento de seus membros. Além disso, você não pode assumir com segurança que a ordem de armazenamento na memória é a mesma que a sua ordem de declaração. Se precisar controlar o layout de armazenamento de uma estrutura, você pode aplicar o StructLayoutAttribute atributo à Structure instrução.

Exemplo

O exemplo a seguir usa a Structure instrução para definir um conjunto de dados relacionados para um funcionário. Ele mostra o uso de Public, Friende Private membros para refletir a sensibilidade dos itens de dados. Ele também mostra o procedimento, a propriedade e os membros do 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 obter mais informações sobre como usar Structures, consulte Variável de estrutura.

Consulte também