Compartilhar via


Instrução Structure

Declara o nome de uma estrutura e apresenta 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

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

- Público
- Protegido
- Amigo
- Privado
- Amigo Protegido
- Proteção Privada

Consulte os níveis de acesso no Visual Basic.
Shadows Opcional. Veja Sombras.
Partial Opcional. Indica uma definição parcial da estrutura. Consulte Parcial.
name Obrigatório Nome dessa estrutura. Consulte nomes de elementos declarados.
Of Opcional. Especifica que essa é uma estrutura genérica.
typelist Obrigatório se você usar a palavra-chave De . 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 a instrução Implements.
interfacenames Necessário se você usar a Implements instrução. Os nomes das interfaces que essa estrutura implementa.
datamemberdeclarations Obrigatório Zero ou maisConst, Dimou EnumEvent instruções declarando membros de dados da estrutura.
methodmemberdeclarations Opcional. Zero ou mais declarações de Function, Operator, Propertyou 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 UDT (tipo definido pelo usuário) das versões anteriores do Visual Basic. Para obter mais informações, consulte Estruturas.

As estruturas dão suporte a 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, há 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 estruturas são tipos de valor. Para obter mais informações, consulte Estruturas e Classes.

Você só pode usar Structure no namespace ou no nível do módulo. Isso significa que o contexto de 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.

Estruturas padrão para acesso ao Amigo . Você pode ajustar seus níveis de acesso com os modificadores de acesso. Para obter mais informações, consulte os níveis de acesso no Visual Basic.

Regras

  • Nidificação. 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 que contém. 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. Não é possível proteger um membro da estrutura 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 compartilhados em uma estrutura. Você não pode ter apenas constantes, propriedades e procedimentos, mesmo que algumas delas não sejam compartilhadas.

  • Inicialização. Você não pode 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 criar uma instância da estrutura.

  • Herança. Uma estrutura não pode herdar de qualquer tipo que não ValueTypeseja , do qual todas as estruturas herdam. Em particular, uma estrutura não pode herdar de outra.

    Você não pode usar a Instrução Inherits em uma definição de estrutura, mesmo para especificar ValueType.

  • Implementação. Se a estrutura usar a Instrução Implements, você deverá implementar todos os membros definidos por cada interface especificada.interfacenames

  • Propriedade Padrão. Uma estrutura pode especificar no máximo uma propriedade como sua propriedade padrão, usando o modificador Padrão . 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 são padrão para acesso público . Observe que, se a estrutura em si tiver um nível de acesso mais restrito, isso restringirá automaticamente o acesso aos seus membros, mesmo se você ajustar seus níveis de acesso com os modificadores de acesso.

  • Escopo. Uma estrutura está no escopo em todo o namespace, classe, estrutura ou módulo que contém.

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

  • Vida. Uma estrutura em si não tem vida útil. Em vez disso, 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 . Ela termina quando o tempo de vida da variável que a mantém termina.

    Você não pode estender o tempo de vida de uma instância de estrutura. Uma aproximação à funcionalidade de estrutura estática é fornecida por um módulo. Para obter mais informações, consulte a Instrução module.

    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" na Instruçã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 fizer uma referência não qualificada a um elemento de programação, o Visual Basic procurará o elemento primeiro na estrutura aninhada e, em seguida, em sua estrutura de contenção e assim por diante até o elemento que contém mais externo. Para obter mais informações, consulte Referências a Elementos Declarados.

  • Consumo de memória. Assim como acontece com todos os tipos de dados compostos, você não pode calcular com segurança o consumo total de memória de uma estrutura adicionando as alocações de armazenamento nominal 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 sua ordem de declaração. Se você precisar controlar o layout de armazenamento de uma estrutura, poderá aplicar o StructLayoutAttribute atributo à instrução Structure .

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 confidencialidade 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 Structure Variable.

Consulte também