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 botão 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 :
|
Nota: A palavra reservada Me:
A palavra chave
Me refere-se a instância atual de um objeto. A referencia Me
é uma referência oculta para cada método não shared de uma
classe. Cada método pode fazer referência para outros métodos e
variáveis do objeto por meio da referencia Me. A referencia Me é usada normalmente de três formas: 1- qualificar membros de instância
que tem o mesmo nome que os parâmetros. Public
Sub Metodo(ByVal Hora As Integer) Neste exemplo o método Metodo
usa o parâmetro Hora que possui o mesmo nome que a variável
membro da classe. 2- Passar o objeto atual como um
parâmetro para outro método Aqui chamamos o método de um objeto passando a referencia Me. Isto permite o método que você esta chamando acessar o método e propriedades do objeto atual. 3- Usar como indexador Você pode usar a referencia Me para fazer uma cópia do construtor mais especificamente: Public Sub New(ByVal
that As Time) Aqui Me refere-se ao objeto Atual (o objeto cujo construtor esta rodando) e that refere-se a objeto passado. |
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 classe (Shared ou estática) irá se propagar por todo o programa.
Até mais ver ...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências: