evento
Crie aplicativos e agentes de IA
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agoraEste browser já não é suportado.
Atualize para o Microsoft Edge para tirar partido das mais recentes funcionalidades, atualizações de segurança e de suporte técnico.
Especifica que um ou mais elementos de programação declarados estão associados a uma classe ou estrutura em geral, e não a uma instância específica da classe ou estrutura.
O compartilhamento de um membro de uma classe ou estrutura o torna disponível para todas as instâncias, em vez de não compartilhadas, onde cada instância mantém sua própria cópia. O compartilhamento é útil, por exemplo, se o valor de uma variável se aplica a todo o aplicativo. Se você declarar essa variável como Shared
, todas as instâncias acessarão o mesmo local de armazenamento e, se uma instância alterar o valor da variável, todas as instâncias acessarão o valor atualizado.
A partilha não altera o nível de acesso de um membro. Por exemplo, um membro da classe pode ser compartilhado e privado (acessível apenas de dentro da classe), ou não compartilhado e público. Para obter mais informações, consulte Níveis de acesso no Visual Basic.
Contexto da Declaração. Você pode usar Shared
apenas no nível do módulo. Isso significa que o contexto da declaração para um Shared
elemento deve ser uma classe ou estrutura e não pode ser um arquivo de origem, namespace ou procedimento.
Modificadores combinados. Não é possível especificar Shared
junto com Overrides, Overridable, NotOverridable, MustOverride ou Static na mesma declaração.
Acesso. Você acessa um elemento compartilhado qualificando-o com seu nome de classe ou estrutura, não com o nome da variável de uma instância específica de sua classe ou estrutura. Você nem precisa criar uma instância de uma classe ou estrutura para acessar seus membros compartilhados.
O exemplo a seguir chama o procedimento IsNaN compartilhado exposto pela Double estrutura.
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")
Partilha implícita. Não é possível usar o Shared
modificador em uma instrução Const, mas as constantes são implicitamente compartilhadas. Da mesma forma, você não pode declarar um membro de um módulo ou uma interface como , Shared
mas eles são implicitamente compartilhados.
Armazenamento. Uma variável ou evento compartilhado é armazenado na memória apenas uma vez, não importa quantas ou poucas instâncias você crie de sua classe ou estrutura. Da mesma forma, um procedimento ou propriedade compartilhada contém apenas um conjunto de variáveis locais.
Acesso 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. Embora isso geralmente funcione como esperado, o compilador gera uma mensagem de aviso e faz o acesso através do nome da classe ou estrutura em vez da variável.
Acesso por meio de uma expressão de instância. Se você acessar um elemento compartilhado por meio de uma expressão que retorna uma instância de sua classe ou estrutura, o compilador fará o acesso por meio do nome da classe ou estrutura em vez de avaliar a expressão. Esse acesso produz resultados inesperados se você pretendia que a expressão executasse outras ações, bem como retornasse a instância. O exemplo a seguir ilustra essa situação.
Sub Main()
' The following line is the preferred way to access Total.
ShareTotal.Total = 10
' The following 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.
Dim instanceVar As New ShareTotal
instanceVar.Total += 100
' The following 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 WriteLine in ReturnClass() does not run.
Console.WriteLine("Value of total is " & CStr(ShareTotal.Total))
ReturnClass().Total += 1000
End Sub
Public Function ReturnClass() As ShareTotal
Console.WriteLine("Function ReturnClass() called")
Return New ShareTotal
End Function
Public Class ShareTotal
Public Shared Property Total As Integer
End Class
No exemplo anterior, o compilador gera uma mensagem de aviso ambas as vezes que o código acessa a propriedade Total
compartilhada por meio 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 para o procedimento ReturnClass
, isso significa que ele nem sequer gera uma chamada para ReturnClass
, portanto, a ação adicional de exibir "Function ReturnClass() call" não é executada.
O Shared
modificador pode ser usado nestes contextos:
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
evento
Crie aplicativos e agentes de IA
17/03, 21 - 21/03, 10
Junte-se à série meetup para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registe-se agora