Compartilhar via


Compartilhamento (Visual Basic)

Especifica que um ou mais elementos de programação declaradados estão associados com uma classe ou estrutura em geral, e não com uma instância específica da classe ou estrutura.

Comentários

Para usar Compartilhamento

Compartilhamento de um membro de uma classe ou estrutura torna-o disponível para cada instância, em vez de compartilhada, onde cada instância mantém sua própria cópia.Isso é útil, por exemplo, se o valor da variável vale para toda a aplicação.Se você declara essa variável como Shared, todas suas instância acessam o mesmo local de armazenamento, se uma instância muda o valor da variável, todas instâncias acessam o valor atualizado.

Compartilhar não altera o nível de acesso de um membro.Por exemplo, um membro da classe pode ser compartilhado e privado (acessível somente de dentro da classe), ou não compartilhado e público.Para obter mais informações, consulte Níveis de acesso em Visual Basic.

Regras

  • Contexto da Declaração. Você pode usar Shared somente em nível de módulo.Isso significa que o contexto da declaração para um elemento Shared deve ser uma classe ou estrutura, e não um arquivo fonte, namespace ou procedimento.

  • Modificadores Combinados. Não é possível especificar Shared juntamente com Substitui, Overridable, NotOverridable, MustOverride, ou Static (Visual Basic) na mesma declaração.

  • Acessando. Você acessa um elemento compartilhado qualificando-o com seu nome de estrutura ou classe, não com o nome da variável de uma instância específica de sua classe ou estrutura.Você não precisa nem criar uma instância da classe ou estrutura para acessar seus membros compartilhados.

    O exemplo a seguir chama o procecimento compartilhado IsNaN exposto pela estrutura Double.

    If Double.IsNaN(result) Then MsgBox("Result is mathematically undefined.")

  • Compartilhamento Implícito. Você não pode usar o modificador Shared nums Declaração Const (Visual Basic), mas constantes são implicitamente compartilhadas.Similarmente, você não pode declarar um membro de um módulo ou interface como Shared, mas eles são implicitamente compartilhados.

Comportamento

  • Armazenamento Uma variável compartilhada ou evento é armazenado na memória somente uma vez, não importa quantas vezes você crie sua classe ou estrutura.Similarmente, um procedimento compartilhado ou propriedade contém somente um conjunto de variáveis locais.

  • Acessando através de uma Variável de Instância É possível acessar um elemento compartilhado qualificando-o com o nome de uma variável que contém uma instância específica de sua classe ou estrutura.Apesar disso geralmente funcionar como esperado, o compilador gera uma mensagem de aviso e faz o acesso através do nome da classe ou estrutura ao invés da variável.

  • Acessando através de uma Expressão de Instância Se você acessa um elemento compartilhado através de uma expressão que retorna uma instância de uma classe ou estrutura, o compilador faz o acesso através do nome ou estrutura da classe em vez de analisar a expressão.Isso pode produzir resultados inesperados se você pretendia que a expressão executasse outras ações além de retornar a instância.O exemplo a seguir ilustra isto:

    Sub main()
        shareTotal.total = 10
        ' The preceding line is the preferred way to access total.
        Dim instanceVar As New shareTotal
        instanceVar.total += 100
        ' The preceding line generates a compiler warning message and
        ' accesses total through class shareTotal instead of through
        ' the variable instanceVar. This works as expected and adds
        ' 100 to total.
        returnClass().total += 1000
        ' The preceding line generates a compiler warning message and
        ' accesses total through class shareTotal instead of calling
        ' returnClass(). This adds 1000 to total but does not work as
        ' expected, because the MsgBox in returnClass() does not run.
        MsgBox("Value of total is " & CStr(shareTotal.total))
    End Sub
    Public Function returnClass() As shareTotal
        MsgBox("Function returnClass() called")
        Return New shareTotal
    End Function
    Public Class shareTotal
        Public Shared total As Integer
    End Class
    

    No exemplo anterior, o compilador gera uma mensagem de aviso nas duas vezes que o código acessa a variável compartilhada total através de uma instância.Em cada caso ele faz o acesso diretamente através da classe shareTotal e não faz uso de nenhuma instância.No caso da chamada pretendida ao procedimento returnClass, isso significa que ele nem gera um chamado a returnClass, de forma que a ação adicional de mostrar "Function returnClass() called" não é feita.

O modificador Shared pode ser utilizado nestes contextos:

Esmaecer declaração

Declaração de evento

Instrução função

Declaração Operator

Propriedade declaração

Instrução Sub

Consulte também

Conceitos

Tempo de vida no Visual Basic

Procedimentos no Visual Basic

Membros compartilhados no Visual Basic

Referência

Sombras

Static (Visual Basic)

Outros recursos

Estruturas: suas próprias tipos de dados

Noções básicas sobre classes