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ância nero.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