Compartilhar via


Estruturas e Classes (Visual Basic)

Visual Basic unifica a sintaxe para estruturas e classes, com o resultado que ambas as entidades suportam a maioria dos mesmos recursos.No entanto, também existem diferenças importantes entre as estruturas e classes.

Classes têm a vantagem de ser tipos de referência — passar uma referência é mais eficiente do que passar uma variável de estrutura com todos os seus dados.Por outro lado, as estruturas não requerem alocação de memória na pilha global.

Como você não pode herdar de uma estrutura, estruturas devem ser usadas somente para objetos que não precisam ser estendidos.Use estruturas quando o objeto que você deseja criar tem uma instância de tamanho pequeno e leve em conta as características de desempenho de classes versus estruturas.

Semelhanças

Estruturas e classes são semelhantes nos seguintes aspectos:

  • Ambas são tipos continente, o que significa que elas contêm outros tipos como membros.

  • Ambas tem membros, que podem incluir construtores, métodos, propriedades, campos, constantes, enumerações, eventos e manipuladores de eventos.No entanto, não confunda esses membros com o elementos declarado de uma estrutura.

  • Membros de ambas podem ter níveis de acesso individualizados.Por exemplo, um membro pode ser Public declarado e outro Private.

  • Ambas podem implementar interfaces.

  • Ambas podem te construtores compartilhados, com ou sem parâmetros.

  • Ambos podem expor uma propriedade padrão , desde que a propriedade aceite pelo menos um parâmetro.

  • Ambas podem declarar e disparar eventos, e ambas podem declarar representantes.

Diferenças

Estruturas e classes diferem nas particularidades a seguir:

  • Estruturas são tipos de valor ; classes são tipos de referência.Uma variável de um tipo de estrutura contém a estrutura dos dados, em vez de conter uma referência para os dados como um tipo de classe teria.

  • Estruturas usam alocação da pilha (stack); classes usam alocação da heap.

  • Todos os elementos de estrutura são Public por padrão; variáveis de classe e constantes são Private por padrão, enquanto outros membros da classe são Public por padrão.Esse comportamento para membros de classe fornece compatibilidade com o sistema de padrões do Visual Basic 6.0.

  • Uma estrutura deve ter pelo menos uma variável não compartilhada ou evento não compartilhado e não personalizado; uma classe pode ser completamente vazia.

  • Elementos de estrutura não podem ser declarados como Protected; membros de classe podem.

  • Um procedimento de estrutura pode manipular eventos somente se ele é um procedimento Compartilhado (Visual Basic)Sub e somente por meio de Instrução AddHandler; qualquer procedimento de classe pode manipular eventos, usando a palavra-chave Cláusula Handles (Visual Basic) ou a instrução AddHandler.Para obter mais informações, consulte Eventos (Visual Basic).

  • Declarações de variável de estrutura não podem especificar inicializadores ou tamanhos iniciais para matrizes; declarações de variável de classe podem.

  • Estruturas implicitamente herdam da classe System.ValueType e não podem herdar de nenhum outro tipo; classes podem herdar de qualquer classe ou classes diferentes de System.ValueType.

  • Estruturas não são herdáveis; classes são.

  • Estruturas são nunca finalizadas, portanto, a Common Language Runtime (CLR) nunca chama o método Finalize em qualquer estrutura; as classes são finalizadas pelo coletor de lixo (GC), que chama Finalize em uma classe quando ele detecta que não á referências ativas restantes.

  • Uma estrutura não requer um construtor; uma classe requer.

  • Estruturas podem ter construtores compartilhados somente se elas tiverem parâmetros; classes podem tê-los com ou sem parâmetros.

Cada estrutura tem um construtor público implícito sem parâmetros.Esse construtor inicializa todos os elementos de dados da estrutura para seus valores padrão.Você não pode redefinir esse comportamento.

Instâncias e Variáveis

Como estruturas são tipos de valor, cada variável de estrutura é permanentemente é acoplada a uma instância estrutura individual.Mas classes são tipos de referência, e um variável de objeto pode referir-se a várias instâncias de classe em momentos diferentes.Essa distinção afeta o uso de classes e as estruturas das seguintes maneiras:

  • Inicialização. Uma variável de estrutura implicitamente inclui uma inicialização dos elementos usando a estrutura do construtor sem parâmetros.Portanto, Dim s As struct1 é equivalente a Dim s As struct1 = New struct1().

  • Atribuindo variáveis. Quando você atribui uma variável de estrutura a outra, ou passa uma instância de estrutura para um argumento de procedimento, os valores atuais de todos os elementos de variáveis são copiados para a nova estrutura.Quando você atribui uma variável de objeto a outra, ou passa um variável de objeto para um procedimento, somente o ponteiro de referência é copiado.

  • Atribuindo Nothing. Você pode atribuir o valor Nada (Visual Basic) para uma estrutura variável, mas a instância continua a ser associado à variável.Você ainda pode chamar seus métodos e acessar seus elementos de dados, embora os elementos de variável sejam reinicializados pela atribuição.

    Por outro lado, se você definir um variável de objeto como Nothing, você o dissocia de qualquer instância de classe, e não pode acessar todos os membros através da variável até que você atribua uma outra instância a ela.

  • Várias Instâncias. Uma variável de objeto pode ter instâncias de classe diferente atribuídas a ela em diferentes momentos, e várias variáveis de objeto podem referir-se à mesma instância de classe ao mesmo tempo.As alterações que você fizer nos valores de membros de classe afetarão esses membros quando acessados por outra variável apontando para a mesma instância.

    Elementos de estrutura, no entanto, estão isolados dentro sua própria instância.Alterações em seus valores não serão refletidas em qualquer outra variável de estrutura, mesmo em outras instâncias da mesma declaração Structure.

  • Igualdade. Teste de igualdade de duas estruturas deve ser executado com um teste elemento-por-elemento.Duas variáveis de objeto podem ser comparadas com o Equals método.EqualsIndica se as duas variáveis aponte para a mesma instância.

Consulte também

Tarefas

Solucionando problemas de tipos de dados (Visual Basic)

Conceitos

Tipos de dados em Visual Basic

Tipos de dados compostos (Visual Basic)

Tipos de valor e referência

Estruturas e outros elementos de programação (Visual Basic)

Outros recursos

Estruturas (Visual Basic)

Objetos e Classes em Visual Basic