 VB.NET - Usando métodos e membros shared 
(estáticos)
 
VB.NET - Usando métodos e membros shared 
(estáticos)
Você sabe o que são e como usar membros ou métodos Shared (estáticos) ?
As propriedades e métodos de uma classe podem ser membros de instância da classe ou membros compartilhados(shared) ou estáticos.
Membros de instância são associados com instâncias de um tipo , enquanto que membros estáticos (shared) são associados com a classe e não com uma instância em particular.
Métodos são métodos de instância a 
menos que você explicitamente os defina como métodos estáticos (shared) usando a 
palavra-chave Shared.
A grande maioria dos métodos são métodos de instância , isto significa que você 
deve acessá-los a partir de um objeto especifico. Quando você precisar de um 
método de classe , ou seja , um método que seja acessado diretamente da classe 
você deve definí-lo como estático ou Shared.
Você pode acessar um membro shared através do nome da classe na qual ele foi 
declarado. Vamos supor que você têm uma classe chamada Botao e tenha 
também objetos instanciados desta classe chamado btnAtualiza e 
btnDeleta. Se a classe Botao tiver um método Desenhar() e um 
método shared GetBotaoCount(). O trabalho de Desenhar() é desenhar 
o botao atual, e o trabalho de GetBotaoCount() é retornar o numero de botões 
atualmente visíveis no formulário.
Você pode acessar um método de instância através de uma instância da classe , ou 
seja , através de um objeto:
btnAtualiza.Metodo()
Você também pode acessar um método shared da mesma forma:
btnAtualiza.GetBotaoCount()
Você pode também acessar um método shared através do nome classe assim :
Botao.GetBotaoCount()
Isto permite que você acesse o método shared sem ter criado uma instância da 
classe.
Um uso comum de variáveis membros shared ,  é gerenciar o número de 
instâncias/objetos que atualmente existem para uma classe. No exemplo a 
seguir vamos criar a classe Cachorro. Esta classe poderá ser usada em uma 
loja de animais de estimação.
A classe cachorro pode ser criada em um projeto do tipo console selecionando a 
opção Add Class Module:
| Option 
		Strict On Imports System Class Cachorro Private Shared instancias As Integer = 0 Private peso As Integer Private nome As String Public Sub New(ByVal name As String, ByVal peso As Integer) instancias += 1 Me.nome = nome Me.peso = peso End Sub Public Shared Sub quantosCachorros( ) Console.WriteLine("{0} cachorros instanciados", instancias) End Sub Public Sub informaPeso( ) Console.WriteLine("{0} is {1} Kg", nome, peso) End Sub End Class | A classe Cachorro 
		possui: as seguintes variáveis membros: 
 um construtor 
 os seguintes métodos : 
 | 
Para usar a classe vamos criar um módulo no mesmo projeto anterior:
Exemplo de utilização da classe Cachorro e seus métodos e propriedades:
| Module Module1 Sub Main( ) Cachorro.quantosCachorros( ) Dim bilu As New Cachorro("Bilu", 5)
bilu.informaPeso( )Cachorro.quantosCachorros( ) Dim nero As New Cachorro("nero", 7)
nero.informaPeso( )                ' método de instâncianero.quantosCachorros( ) ' método shared através da instância Cachorro.quantosCachorros( ) ' método shared através da classe End Sub End Module 
 | 
A classe Cachorro é 
iniciada pela definição da variável membro shared instancia, que é 
iniciada com valor zero. Este campo membro shared irá gerenciar o número de 
objetos Cachorros que serão criados. 
Cada vez que o construtor (Sub New) for executado (criando um novo 
objeto) o campo instancias será incrementado de uma unidade.
Nota:
Um método é invocado sempre que uma instância de um objeto 
é criada. Este método é chamado construtor. Cada vez que você define uma classe 
você é livre para definir o seu próprio construtor , mas se você não o fizer , o 
compilador irá fornecer um para você de forma transparente e automática. O 
serviço do construtor é criar um objeto especificado pela classe e colocá-lo em 
um estado válido. Antes do construtor rodar , o objeto é uma referencia na 
memória, depois que o construtor é executado e finalizado , a memória trata com 
uma instância válida da classe.(Qualquer construtor que não toma argumentos é 
chamado construtor padrão. )
A classe Cachorro também define dois campos de instância: nome e peso 
que tratam do nome e do peso de cada objeto Cachorro.
A classe Cachorro também define dois métodos : 
- quantosChachorros() - é um método shared ; o numero de Cachorros não é 
um atributo de qualquer Cachorro , mas um atributo da classe.
- informaPeso() - é um método de instância ; o nome e o peso de cada 
cachorro é obtido por instância, i.e, cada cachorro tem seu próprio nome e peso.
O Método Main() acessa o método shared quantosCachorros 
diretamente , através da classe :
Cachorro.QuantosCachorros( )    ' 
método shared através da classe
O método Main() cria uma instância de Cachorros e acessa o método 
de instância informaPeso() através de uma instância de Cachorro.(Ex: bilu)
Dim bilu as New Cachorro("Bilu",10)
bilu.informaPeso()
cada vez que um novo cachorro for criado, o método é incrementado de uma 
unidade.
Você acessa a instância do método através do objeto , mas você pode acessar o 
método shared ou através de um objeto ou através da classe conforme podemos ver 
no código escrito a seguir:
nero.informaPeso( )               
 ' método de instância
nero.quantosCachorros( )         
' método shared através da instância
Cachorro.QuantosCachorros( )   ' método 
shared através da classe
Você pode pensar em um membro de instância como uma variável global que todo o 
programa pode enxergar. Lembre-se também que qualquer alteração feita no 
conteúdo de um variável de instância irá se propagar por todo o programa.
Até mais ver ...
José Carlos Macoratti
