You are on page 1of 35

Programao orientada a objetos no Visual Basic

Objetos so fundamentais para programao de Visual Basic: Formulrios e controles so objetos.


Bancos de dados so objetos. Se voc tiver usado Visual Basic por um tempo, ou caso voc tenha
trabalhado atravs de exemplos na documentao, ento voc programou com objetos, mas h
muito mais objetos do que voc viu at o momento.
Nos tpicos a seguir, voc ver como fcil criar seus prprios objetos a partir de classes que
voc define e para usar objetos para simplificar sua codificao e aumentar a reutilizao de
cdigo.
Nesta seo
Introduo a Objetos no Visual Basic
Fornece uma introduo aos termos e conceitos usados em programao orientada a
objetos.
Noes bsicas sobre classes
Fornece uma viso geral das classes e um exemplo de como definir uma classe.
Criando e Usando Objetos
Mostra como criar e usar as instncias das classes.
Colees em Visual Basic
Fornece uma viso geral das colees.
Eventos no Visual Basic
Mostra como Declarar e usar os eventos.
Delegados no Visual Basic
Mostra como Declarar e usar delegados.
Interfaces em Visual Basic
Descreve o que so interfaces e como voc pode us-las em seus aplicativos.
A herana no Visual Basic
Descreve como definir classes Visual Basic para servirem como base para outras classes.
Membros compartilhados no Visual Basic
Descreve os membros que podem ser usados sem instncias.
Vinculao antecipada e mais tarde
Descreve a vinculao, que executada pelo compilador quando um objeto atribudo a
uma varivel de objeto e as diferenas entre objetos com vinculao-antecipada e
vinculao atrasada.

Introduo a Objetos no Visual Basic
Um objeto uma estrutura quem contm dados e mtodos para manipular os dados. Quase tudo
que voc faz em Visual Basic associado com objetos. Se voc novato na programao
orientada a objetos, os termos e conceitos a seguir vo lhe ajudar nesta fase introdutria.
Classes e Objetos
As palavras "classe" e "objeto" so to usadas em programao orientada a objeto que fcil
confundir os termos. De modo geral, uma class uma representao abstrata de algo, enquanto
um objeto um exemplo manipulvel daquilo que a classe representa. A nica exceo a esta
regra so os membros da classe compartilhados, que so manipulveis em ambas as instncias de
uma classe e variveis de objeto declaradas como o tipo da classe.
Campos, Propriedades, Mtodos e Eventos
Classes consistem de campos, propriedades, mtodos e eventos. Campos e propriedades
representam informaes que um objeto contm. Campos so como variveis, porque eles podem
ser lidos ou alterados diretamente. Por exemplo, se voc tem um objeto chamado "Carro" voc
pode armazenar sua cor em um campo chamado "Cor."
Propriedades so recuperadas e modificadas como campos, mas so implementadas pelos
procedimentos Get e Set, que fornecem maior controle sobre como valores so alterados ou
recuperados. A camada indireta entre o valor sendo armazenado e os procedimentos que usam
este valor ajuda a isolar seus dados e permite que voc valide valores antes de eles serem
atribudos ou recuperados.
Mtodos representam aes que um objeto pode realizar. Por exemplo, um objeto "Carro" pode
ter os mtodos "PartidaNoMotor", "Dirigir" e "Parar". Voc define mtodos ao adicionar
procedimentos, quer sejam Sub rotinas ou funes, a sua classe.
Eventos so notificaes que um objeto recebe de, ou transmite para, outros objetos ou
aplicativos. Eventos permitem que objetos realizem aes sempre que uma ocorrncia especfica
ocorrer. Um exemplo de evento para a classe "Carro" seria o evento "Check-Eengine". Como o
Microsoft Windows um sistema operacional movido por eventos, eventos podem vir de outros
objetos, aplicativos ou de entradas do usurio como cliques do mouse ou teclas pressionadas.
Encapsulamento, Herana e Polimorfismo
Campos, propriedades, mtodos e eventos so apenas a metade da equao da programao
orientada a objeto. Verdadeira programao orientada a objeto requer objetos para suporte
de trs qualidades: Encapsulamento, herana e polimorfismo.
Encapsulamento significa que um grupo de propriedades, mtodos e outros membros relacionados
so tratados como unidade ou um objeto nico. Objetos podem controlar como as propriedades
so alteradas e os mtodos so executados. Por exemplo, um objeto pode validar valores antes de
permitir que as propriedades mudem. Encapsulamento tambm torna mais fcil de alterar a
implementao em uma ocasio mais tarde permitindo que voc oculte detalhes da
implementao de seus objetos, uma prtica conhecida como ocultamento de dados.
Herana descreve a habilidade de se criarem novas classes baseadas em uma classe pr-existente.
A nova classe herda todas as propriedades, mtodos e eventos da classe base, e pode ser
customizada com propriedades e mtodos adicionais. Por exemplo, voc pode criar uma nova
classe chamada "Caminho" baseada na classe "Carro". A classe "Caminho" herda a propriedade
"Cor" da classe "Carro" e pode ter propriedades adicionais como "TraoEmQuatroRodas".
Polimorfismo significa que voc pode ter mltiplas classes que podem ser usadas
intercambiavelmente, mesmo que cada classe implemente as mesmas propriedades e mtodos de
modos diferentes. Polimorfismo importante para a programao orientada a objeto porque
permite que voc use itens com o mesmo nome, independente de qual tipo de objeto est em uso
no momento. Por exemplo, dada a classe base "Carro", o polimorfismo permite que o
programador defina diferentes mtodos "PartidaNoMotor" para qualquer nmero de classes
derivadas. O mtodo "PartidaNoMotor" de uma classe derivada chamada "CarroADiesel" pode ser
completamente diferente do mtodo de mesmo nome na classe base. Outros procedimentos ou
mtodos podem usar o mtodo "PartidaNoMotor" da classe derivada da mesma maneira, sem
importar qual tipo de objeto "Carro" est sendo usado no momento.
Sobrecarga, Substituio e Sombreamento
Sobrecarga, substituio e sombreamento so conceitos similares que podem ser facilmente
confundidos. Embora todas as trs tcnicas permitam que voc crie membros com o mesmo
nome, h algumas diferenas importantes.
y Membros sobrecarregados so usados para prover diferentes verses de uma propriedade
ou mtodo que tm o mesmo nome, mas aceitam diferente nmero de parmetros ou
parmetros com diferentes tipos de dados.
y Propriedades e mtodos substitudos so usados para substituir uma propriedade ou
mtodo herdado que no apropriado classe derivada. Membros substitudos devem
aceitar o mesmo tipo de dados e nmero de argumentos. Classes derivadas herdam
membros substitudos.
y Membros sombreados so usados para substituir localmente um membro que tem um
escopo mais amplo. Qualquer tipo pode sombrear qualquer outro tipo. Por exemplo, voc
pode declarar uma propriedade que sombreia um mtodo herdado com o mesmo nome.
Membros sombreados no podem ser herdados.


Noes bsicas sobre classes
Classes so importantes porque permitem que voc agrupar itens relacionados como uma
unidade, bem como controlar sua visibilidade e acessibilidade de outros procedimentos de
programao orientada a objeto. Classes tambm podem herdar e reutilizar cdigo definido em
Outro classes.

Classes: Plantas para objetos
Classes so representaes simblicas de objetos; classes descrevem as propriedades, campos,
mtodos e eventos que forma objetos da mesma forma que plantas descrevem os itens que
formam construes. Assim com uma planta pode ser usada para criar diversas construes, uma
nica classe pode ser usada para criar quantos objetos forem necessrios. Assim como uma planta
define quais partes da construo so acessveis para pessoas que usam a construo, classes
podem controlar o acesso de usurios a itens do objeto atravs de encapsulao.
Classes e Objetos
Os termos classe e objeto so s vezes usados representando a mesma coisa, mas na verdade,
classes descrevem a estrutura de objetos, enquanto objetos so instncias teis de classes. Cada
instncia uma cpia exata ainda distinta da sua classe. Porque um objeto uma instncia de
uma classe, o ato de criao de um objeto chamado instanciao. Cada instncia uma cpia
exata ainda distinta da sua classe. Porque um objeto uma instncia de uma classe, o ato de
criao de um objeto chamado instanciao.
Usando a analogia da planta, a classe a planta, e o objeto a construo feita daquela planta.
Geralmente, a mudana de dados num objeto no muda as informaes contidas em nenhum
outro objeto. (A exceo so os membros compartilhados, membros de classe declarados com o
modificador Shared, que existem independentemente de instncias especficas da classe.)
Encapsulamento
Encapsulamento a habilidade de conter e controlar o acesso a um grupo de itens associados.
Classes fornecem um dos modos mais comuns de encapsular itens. No exemplo abaixo, a classe
BankAccount encapsula os mtodos, campos, e propriedade que descrevem a conta de banco.
Sem encapsulao, voc declararia procedimentos separados e varivel para armazenar e
gerenciar informao da conta de banco, e isso tornaria difcil trabalhar com mais de uma conta ao
mesmo tempo. Com encapsulamento voc pode usar as informaes e procedimentos na classe
BankAccount como uma unidade. Voc pode trabalhar com contas de banco mltiplas
concomitantemente sem confuso pois cada conta representada por uma instncia nica da
classe.
Encapsulamento tambm permite controlar como a informao e procedimentos so usados. Voc
pode usar modificadores de acesso, como Private ou Protected, para previnir procedimentos
externos de executar mtodos de classe ou ler e modificar dados em procedimentos e campos.
Voc deve declarar detalhes internos de uma classe como Private para previnir que eles sejam
usados fora da classe; essa tcnica chamada de esconder informaes, e como informaes do
cliente como o saldo da conta so protegidas.
Uma regra bsica de encapsulamento que dados da classe devem ser modificados ou
recuperados somente atravs de procedimentos ou mtodos Property. Escondendo os detalhes da
implementao de suas classes, previne as classes de serem usadas de forma no desejada, e
permite que voc modifique esses itens no futuro sem risco de problemas de compatibilidade. Por
exemplo, verses posteriores da classe BankAccount poderiam mudar o tipo de dados do campo
AccountBalance sem quebrar outras aplicaes que dependem desse campo tendo um tipo
especfico de tipo de dados.
Herana
Como estruturas Visual Basic, voc pode usar classes para defiir tipos de dados que encapsulam
um grupo de itens relacionados. Diferentemente de estruturas, no entanto, classes Visual Basic
podem herdar e extender as caractersticas de outras classes. Classes que servem como base para
Novo classes so chamados de classes base . Classes derivadas de classes base so chamadas
classes derivadas. Classes derivadas herdam todos os campos, propriedades, mtodos e eventos da
classe base. Isso significa que voc pode desenvolver e debugar uma classe por vez e, depois
reus-la como base para outras classes.
O seguinte exemplo define uma classe base que representa uma conta bancria genrica, e uma
classe especfica que herda as propriedades da classe base mas customizada para descrever
uma conta corrente.
Visual Basic

Copiar Cdigo
Class BankAccount
Private AccountNumber As String
Private AccountBalance As Decimal
Private HoldOnAccount As Boolean = False
Public Sub PostInterest()
' Add code to calculate the interest for this account.
End Sub
ReadOnly Property Balance() As Decimal
Get
' Return the available balance.
Return AccountBalance
End Get
End Property
End Class

Class CheckingAccount
Inherits BankAccount
Sub ProcessCheck()
' Add code to process a check drawn on this account.
End Sub
End Class
Para obter mais informaes sobre herana, consulte Noes bsicas sobre herana.
Membros compartilhados
Por padro, os dados da classe so especficos para cada instncia da classe, mas pode haver
ocasies em que voc queira que um nico item de dados seja compartilhado por todos objetos
criados de uma classe. Nesses casos, use o modificador Shared para fazer com que uma varivel
compartilhe o mesmo valor em todas instncias de uma classe ( Membros Compartilhados so
algumas vezes chamados de "Membros Estticos" em outras linguagens de programao). Voc
pode chamar mtodos compartilhados diretamente usando um nome de classe sem antes criar
uma instncia dessa classe.
Para obter mais informaes sobre membros compartilhados, veja Membros compartilhados no
Visual Basic.
Sombreamento
Classes derivadas podem usar a palavra chave Shadows para declarar um membro com o mesmo
nome que um membro herdado. Membros sombreados no precisam ser do mesmo tipo de dados
que o membro sendo sombreado. Por exemplo, uma propriedade pode sombrear uma varivel do
tipo Integer.
Para obter mais informaes sobre membros compartilhados, veja Sombreamento em Visual
Basic.

Demonstra Passo a passo: Definir classes
Essa explicao passo a passo demonstra como definir classes, que voc pode usar para criar
objetos. Ele tambm mostra como adicionar propriedades e mtodos nova classe e demonstra
como inicializar um objeto.
Observao:
As caixas de Caixa de dilogo e o menu comandos voc consulte pode diferir daquelas descritas na
Ajuda , Dependendo de suas configuraes Ativo ou edio. Para alterar as configuraes, Clique em
Importar e exportar configuraes no menu Ferramentas. Para obter mais informaes, consulte
Configuraes do Visual Studio.
Para definir uma classe
1. Crie um projeto, clicando em Novo Projeto no menu Arquivo. A caixa de dilogo Novo
Projeto aparecer.
2. Selecione aplicativos do Windows na lista de modelos de projetos Visual Basic para exibir
o novo projeto.
3. Adicione uma nova classe ao projeto, clicando em Adicionar Classe no menu de Projeto. A
caixa de dilogo Adicionar novo item exibida.
4. Selecione o modelo Classe.
5. Nomeie a nova classe UserNameInfo.vb e, em seguida, clique em Adicionar para exibir o
cdigo para a nova classe.
Visual Basic

Copiar Cdigo
Public Class UserNameInfo
End Class
Observao:
Voc pode usar o Visual Basic Code Editor to add a class to your startup form by typing the Class
keyword followed by the name of the new class. O Editor de Cdigos fornece uma instruo End
Class correspondente para voc.
6. Defina um campo particular para a classe adicionando o seguinte cdigo entre as
instrues Class e End Class:
Visual Basic

Copiar Cdigo
Private userNameValue As String
Declarar o campo como Private significa que ele pode ser usado somente dentro da
classe. Voc pode disponibilizar campos de fora de uma classe usando modificadores de
acesso, como Public, que fornecem mias acesso. For more information, see Nveis de
acesso em Visual Basic.
7. Defina uma propriedade para a classe adicionando o seguinte cdigo:
Visual Basic

Copiar Cdigo
Public Property UserName() As String
Get
' Gets the property value.
Return userNameValue
End Get
Set(ByVal Value As String)
' Sets the property value.
userNameValue = Value
End Set
End Property
8. Defina um mtodo para a classe adicionando o seguinte cdigo:
Visual Basic

Copiar Cdigo
Public Sub Capitalize()
' Capitalize the value of the property.
userNameValue = UCase(userNameValue)
End Sub
9. Defina um construtor com parmetros para a nova classe adicionando um procedimento
denominado Sub New:
Visual Basic

Copiar Cdigo
Public Sub New(ByVal UserName As String)
' Set the property value.
Me.UserName = UserName
End Sub
O construtor Sub New chamado automaticamente quando um objeto baseado nessa
classe criado. Esse construtor define o valor do campo que contm o nome de usurio.
Para criar um boto para testar a classe
1. Altere o formulrio de inicializao para o modo de design clicando com o boto direito em
seu nome no Gerenciador de Solues e, em seguida, clicando em Designer de Modo de
Exibio. Por padro, o formulrio de inicializao para projetos de aplicativos Windows
chamado Form1.vb. O formulrio principal, em seguida, ser exibido.
2. Adicione um boto ao formulrio principal e clique duas vezes nele para exibir o cdigo
para o manipulador de eventos Button1_Click. Adicione o seguinte cdigo para chamar
o procedimento de teste:
Visual Basic

Copiar Cdigo
' Create an instance of the class.
Dim user As New UserNameInfo("Moore, Bobby")
' Capitalize the value of the property.
user.Capitalize()
' Display the value of the property.
MsgBox("The original UserName is: " & user.UserName)
' Change the value of the property.
user.UserName = "Worden, Joe"
' Redisplay the value of the property.
MsgBox("The new UserName is: " & user.UserName)
Para executar seu aplicativo
1. Execute o aplicativo pressionando F5. Clique no boto do formulrio para chamar o
procedimento de teste. Ele exibe uma mensagem informando que o UserName original
"MOORE, BOBBY", porque o procedimento chama o mtodo Capitalize do objeto.
2. Clique OK para descartar a caixa de mensagem. O procedimento Button1 Click altera o
valor da propriedade UserName e exibe uma mensagem informando que o novo valor de
UserName "Worden, Joe".


Classes versus mdulos
Classes e mdulos so tipos de referncia que encapsulam os itens definidos dentro, mas eles
diferem em como itens so acessados a partir de outros procedimentos.
Diferenas entre classes e mdulos
A principal diferena entre classes e mdulos que as classes podem ser instanciadas como
objetos enquanto os mdulos padro no podem. Como h apenas uma cpia dos dados de um
mdulo padro, quando uma parte do seu programa altera uma varivel pblica em um mdulo
padro, qualquer outra parte do programa recebe o mesmo valor se ler essa varivel. Em
contraste, dados do objeto existem separadamente para cada objeto instanciado. Outra diferena
que, ao contrrio dos mdulos padro, classes podem implementar interfaces.
Observao:
Quando o Modificador de Shared aplicado a um membro da classe, ele associado com a classe
propriamente dito, em vez de uma instncia especfica da classe. O membro acessado diretamente
usando o nome da classe, da mesma maneira que membros de mdulo so acessados. Para obter
mais informaes sobre membros compartilhados, veja Membros compartilhados no Visual Basic.
Classes e mdulos tambm usam escopos diferentes para seus membros. Membros definidos em
uma classe tm escopo em uma instncia especfica da classe e existem apenas durante a vida til
do objeto. Para acessar membros de classe de fora de uma classe, voc deve usar nomes
totalmente qualificados no formato de Objeto.Membro.
Por outro lado, o membros declarados dentro de um mdulo so acessveis publicamente por
padro e podem ser acessados por qualquer cdigo que pode acessar o mdulo. Isso significa que
variveis em um mdulo padro so na realidade variveis globais, pois esto visveis de qualquer
lugar em seu projeto, e existem durante a vida til do programa.


Como objetos so criados e destrudos Outros
recursos
Uma instncia de uma classe, um objeto, criado usando a palavra-chave New. Tarefas de
inicializao geralmente devem ser executadas no novos objetos antes de serem usadas. Tarefas
de inicializao ComComumComum Incluir Abrindo de arquivos, conectar a bancos de dados e ler
valores de chaves do Registro. Visual Basic controla a inicializao de novos objetos usando
procedimentos chamados construtores (mtodos EEspecial que permitem o controle sobre a
inicializao).
Depois de Comum objeto sai do escopo, ela lanada pelo ComComumComum Idioma Tempo de
execuo (CLR). Visual Basic controla o versoso de recursos do sistema usando os
procedimentos chamados destruidores. Juntos, construtores e destrutores oferecem suporte a
criao de bibliotecas de classes robusta e previsvel.
Sub Novo e Sub Finalize
O Sub New e procedimentos de Sub Finalize no Visual Basic inicializar e destruir objetos; eles
Substituir a Class_Initialize e mtodos de Class_Terminate usados no Visual Basic 6.0 e
verses anteriores. Ao contrrio de Class_Initialize, o construtor de Sub New pode executar
apenas uma vez quando uma classe Criado. Ele no pode ser chamado explicitamente em
qualquer lugar diferente na Primeiro linha do cdigo de outro construtor da qualquer classe
mesma ou de uma classe derivada. Alm disso, o cdigo no mtodo Sub New sempre ser
executado antes de qualquer outro cdigo em uma classe. Visual Basic 2005 e verses posteriores
implicitamente criar um construtor Sub New em tempo de execuo se voc no definir
explicitamente um procedimento de Sub New para uma classe.
Antes de liberar objetos, o CLR automaticamente chama o mtodo Finalize de objetos que
definem um procedimento de Sub Finalize. O mtodo Finalize pode conter cdigo que precisa
executar imediatamente antes de um objeto destrudo, como o cdigo para fechar arquivos e
Salvando informaes de estado. H uma penalidade de desempenho pequeno para executar Sub
Finalize, portanto, voc deve definir um mtodo Sub Finalize somente quando voc precisa
verso objetos explicitamente.
Observao:
O coletor de lixo do CLR no tem como (e no pode) finalizar objetos no gerenciados, objetos que o
sistema operacional executa diretamente, fora do ambiente CLR. Isso ocorre porque diferentes
objetos no gerenciados devem ser descartados de maneiras diferentes. Essa informao no est
diretamente associada com o objeto no gerenciado; ele deve ser encontrado na documentao para
o objeto. Uma classe que usa os objetos no gerenciados deve descarreg-los em seu mtodo
Finalize.
O destruidor Finalize um mtodo protegido que pode ser chamado somente da classe que ele
pertence, ou de classes derivadas. O sistema chama Finalize automaticamente quando um objeto
destrudo, portanto, voc no deve chamar explicitamente Finalize de fora da implementao
de Finalize uma classe derivada.
Ao contrrio de Class_Terminate, que ser executada assim que um objeto definido como
nada, geralmente h um atraso entre quando um objeto perca escopo e quando o Visual Basic
chama o destruidor Finalize. Visual Basic 2005 e versoses posteriores permitem um segundo
tipo de destruidor, Dispose, que pode ser explicitamente chamado a a qualquer hora para liberar
imediatamente recursos.
Observao:
O Finalize, destruidor, no deve lanar excees, pois eles no podem ser manipulados pelo
aplicativo e podem fazer com que o aplicativo encerre.
Interface IDisposable
Instncias da classe geralmente Controlaram recursos no gerenciados pelo CLR, como
identificadores do Windows e conexes de banco de dados. Esses recursos devem ser descartados
no mtodo Finalize de classe, para que eles sero liberados quando o objeto destrudo pelo
coletor de lixo. No entanto, o coletor de lixo destri objetos apenas quando o CLR requer mais
memria livre. Isto significa que os recursos podem no ser liberados at muito tempo depois que
o objeto sai do escopo.
Para complementar o Garbage Collection, suas classes podem fornecem um mecanismo para
gerenciar ativamente os recursos de sistema se eles implementam a interface de IDisposable.
IDisposable tem um mtodo, Dispose, o qual os clientes devem chamar quando terminarem de
usar um objeto. Voc pode usar o mtodo Dispose para Eliminar imediatamente, liberar recursos e
executar tarefas como fechar arquivos de dados e conexes. Ao contrrio do destruidor Finalize ,
o mtodo Dispose no chamado automaticamente. Clientes de uma classe devem chamar
explicitamente o Dispose quando pretendem liberar imediatamente recursos.
Implementao de IDisposable
Uma classe que implementa a interface de IDisposable deve incluir essas sees de cdigo:
y Um campo para controlar das se o objeto foi descartado:

Copiar Cdigo
Protected disposed As Boolean = False
y Uma sobrecarga de Dispose que libera recursos da classe. Este mtodo deve ser chamado
pelo Dispose e mtodos de Finalize da classe base:

Copiar Cdigo
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free managed resources.
End If
' Insert code to free unmanaged resources.
End If
Me.disposed = True
End Sub
y Uma implementao de Dispose contm o seguinte cdigo:

Copiar Cdigo
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize(Me)
End Sub
y Finalize um override do mtodo que contm apenas o seguinte cdigo:

Copiar Cdigo
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
Derivando de uma classe que implementa IDisposable
Uma classe que deriva de uma classe base que implementa a interface de IDisposable no precisa
substituir qualquer um dos mtodos base a menos que ele use recursos adicionais que precisam
ser descartados. Nessa situao, a classe derivada deve substituir mtodo de
Dispose(disposing) da classe base para Dispose de recursos da classe derivada. Este override
deve chamar a classe base do Dispose (disposing) mtodo

Copiar Cdigo
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free managed resources.
End If
' Insert code to free unmanaged resources.
End If
MyBase.Dispose(disposing)
End Sub
A classe derivada no deve sobrepor os mtodos Dispose e Finalize da classe base. Quando esses
mtodos so chamados de uma instncia da classe derivada, implementao da classe base
desses mtodos chamar Substituir a classe derivada do mtodo Dispose(disposing).
Visualizao
O diagrama a seguir mostra quais mtodos so herdados e quais mtodos so substitudos na
classe derivada.

Quando este Dispose e Finalize padro seguido, os recursos da classe derivada e a classe base
so corretamente eliminados. A diagrama a seguir mostra quais mtodos chamados quando as
classes so descartadas e finalizadas.

Lixo coleo e Finalize Destructor
O .NET Framework usa o sistema de coleo de lixo (Garbage Collection) da referncia de
rastreamento para periodicamente liberar os recursos no utilizados. O Visual Basic 6.0 e verses
anteriores usam um sistema diferente chamado referncia de contagem para gerenciar recursos.
Embora ambos os sistemas executem a mesma funo automaticamente, existem algumas
diferenas importantes.
O CLR periodicamente destri objetos quando o sistema determina que esses objetos no so
mais necessrios. Os objetos so liberados mais rapidamente quando recursos do sistema esto
no fornecimento Abreviado e com menos freqncia caso contrrio. O atraso entre quando um
objeto perca escopo e quando o CLR libera ele significa que, ao contrrio com objetos no Visual
Basic 6.0 e verses anteriores, voc no pode determinar exatamente quando o objeto ser
destrudo. Em tais situaes, objetos so considerados ter de vida til de no-determinstica . Na
maioria dos casos, vida til de no-determinstica no Altera como escrever aplicativos, desde que
voc se lembre de que o destruidor Finalize no pode ser executado imediatamente quando um
objeto perde o escopo.
Outra diferena entre o lixo coleo (Garbage Collection) envolve o uso de Nothing. Para usufruir
da contagem de referncia no Visual Basic 6.0 e verses anteriores, os programadores atribuem
s vezes, Nothing a variveis de objeto para liberar as referncias a essas variveis. Se a varivel
realizada a ltima referncia ao objeto, o objeto de recursos foram liberados imediatamente Em
verses posteriores do Visual Basic, enquanto que pode haver casos em que este procedimento
ainda seja valioso, desenvolv-lo nunca faz com que o objeto referenciado para liberar seus
recursos seja de fato liberado imediatamente. Para liberar recursos imediatamente, use o
mtodo Dispose do objeto, se disponvel. A nica vez que voc deve definir uma varivel como
Nothing quando sua vida til tempo relativo para o tempo que o coletor de lixo leva para
detectar objetos rfos.

Como: Implementar o Dispose Finalize padro (Visual
Basic)
The Dispose Finalize pattern ensures that resources are released when the object is no longer
needed.
Exemplo
The ResourceClass class in the following example utilizes managed and unmanaged resources
and then uses the Dispose Finalize pattern to dispose of them properly. Os recursos e suas
funes so:
y A implementao do mtodo Dispose, que permite aos usurios da classe Dispose de
instncias de classe. Este mtodo chama Dispose(True) para Dispose de recursos do
objeto e, ento, chama SuppressFinalize para impedir que o cdigo de finalizao
executando um segundo tempo.
y A Substituir do mtodo base Finalize, que permite que o ComComumComum Idioma
Tempo de execuo (CLR) coletor de lixo Dispose de instncias de classe. Este mtodo
chama Dispose(False) para Dispose de recursos do objeto. Observe que se Dispose era
chamado anteriormente para o objeto, sua chamada SuppressFinalize poderia impedir o
coletor de lixo chamar o mtodo Finalize.
y A sobrecarga do mtodo Dispose, que faz o trabalho de descarte. Leva um parmetro
booleano, disposing, que indica se o seu cdigo iniciadas alienao do objeto. Quando
voc descartar um objeto, Tudo seus recursos devem ser descartados da. Quando o
coletor de lixo CLR descarta de um objeto, somente os recursos no gerenciados devem
ser descartados da; o coletor de lixo descarta automaticamente os recursos gerenciados
quando necessrio.
For more information, see Como objetos so criados e destrudos Outros recursos.
Visual Basic

Copiar Cdigo
Public Class ResourceClass
Implements IDisposable

Private managedResource As System.ComponentModel.Component
Private unmanagedResource As IntPtr
Protected disposed As Boolean = False

Public Sub New()
' Insert appropriate constructor code here.
End Sub

Protected Overridable Overloads Sub Dispose( _
ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
managedResource.Dispose()
End If
' Add code here to release the unmanaged resource.
unmanagedResource = IntPtr.Zero
' Note that this is not thread safe.
End If
Me.disposed = True
End Sub

Public Sub AnyOtherMethods()
If Me.disposed Then
Throw New
ObjectDisposedException( Me.GetType().ToString, _
"This object has been disposed." )
End If
End Sub

#Region " IDisposable Support "
' Do not change or add Overridable to these methods.
' Put cleanup code in Dispose(ByVal disposing As Boolean).
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize( Me)
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class
Este exemplo de cdigo tambm est disponvel como um trecho de cdigo IntelliSense. No
selecionador de trechos de cdigo, ele est localizado em Visual Basic Language. Para obter mais
informaes, consulte HOW TO: Trechos Inserir em seu cdigo (Visual Basic).
Compilando o cdigo
Este exemplo requer:
y Acesso aos membros do espaos para nomes System e System.ComponentModel.
Adicione uma declarao Imports se voc no est qualificando completamente os
nomes de membros em seu cdigo. Para obter mais informaes, consulte Declarao
Imports (Tipo e Namespace .NET).
Essas alteraes devem ser feitas no cdigo:
y Substituir ResourceClass com o nome da classe que implementa IDisposable.
y Use o teste no AnyOtherMethods em quaisquer mtodos usando os recursos que podem
ter sido alienados.
y Substituir a declarao de managedResource com declaraes de qualquer gerenciados
objetos na sua classe que precisam ser descartados. Se uma classe implementa
IDisposable ou tem um mtodo de Close, ele provavelmente precisar ser descartado.
No mtodo de Dispose, fechar ou Dispose desses objetos.
y Substituir a declarao de unManagedResource com declaraes de objetos no
gerenciados em sua classe que precisam ser descartados. O mtodo de descarte desses
objetos depende de como o objeto definido. Para obter detalhes, consulte a
documentao no objeto.
Programao robusta
Depois que tiver sido chamado o mtodo Dispose, objetos contidos na sua coleo no ser
vlidos. Voc deve testar o campo disposed antes de executar quaisquer operaes sobre o
objeto. Para obter um exemplo, consulte o mtodo AnyOtherMethods no exemplo de cdigo.


Usando Construtores e Destrutores
Construtores e destrutores controlam a criao e a destruio de objetos.
Construtores
Para criar um construtor para uma classe, crie um procedimento chamado Sub New em qualquer
lugar na definio da classe. Para criar um construtor com parmetros, especifique os nomes e
tipos de dados dos argumentos para Sub New exatamente como voc faria para qualquer outro
procedimento, como no cdigo a seguir:
Visual Basic

Copiar Cdigo
Sub New(ByVal s As String)
Os construtores so freqentemente sobrecarregados, como no cdigo a seguir:
Visual Basic

Copiar Cdigo
Sub New(ByVal s As String, i As Integer)
Quando voc define uma classe derivada de outra classe, a primeira linha de um construtor deve
ser uma chamada para o construtor da classe base, a menos que a classe base tenha um
construtor acessvel que no recebe parmetros. Uma chamada para a classe base que contm o
construtor acima, por exemplo, seria MyBase.New(s). Caso contrrio, MyBase.New opcional, e o
tempo de execuo Visual Basic chama implicitamente.
Depois que voc Gravar o cdigo para chamar o construtor do objeto pai, voc pode adicionar
qualquer cdigo de inicializao adicionais para o procedimento de Sub New. Sub New pode
aceitar argumentos quando chamado como um construtor com parmetros. Esses parmetros so
passados do procedimento que est chamando o construtor, por exemplo, Dim AnObject As New
ThisClass(X).
Destructors
O cdigo a seguir mostra como usar Dispose e Finalize para liberar recursos em um classe base.
Observao:
Voc deve seguir as diretrizes para implementao IDisposable definir check-out no Como objetos
so criados e destrudos Outros recursos.
Visual Basic

Copiar Cdigo
' Design pattern for a base class.
Public Class Base
Implements IDisposable

' Keep track of when the object is disposed.
Protected disposed As Boolean = False

' This method disposes the base object's resources.
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free managed resources.
End If
' Insert code to free unmanaged resources.
End If
Me.disposed = True
End Sub

#Region " IDisposable Support "
' Do not change or add Overridable to these methods.
' Put cleanup code in Dispose(ByVal disposing As Bool ean).
Public Sub Dispose() Implements IDisposable.Dispose
Dispose(True)
GC.SuppressFinalize( Me)
End Sub
Protected Overrides Sub Finalize()
Dispose(False)
MyBase.Finalize()
End Sub
#End Region
End Class
O cdigo a seguir mostra como usar Dispose e Finalize para liberar recursos em um classe base.
Visual Basic

Copiar Cdigo
' Design pattern for a derived class.
Public Class Derived
Inherits Base

' This method disposes the derived object's resources.
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposed Then
If disposing Then
' Insert code to free managed resources.
End If
' Insert code to free unmanaged resources.
End If
MyBase.Dispose(disposing)
End Sub

' The derived class does not have a Finalize method
' or a Dispose method with parameters because it inherits
' them from the base class.
End Class
O cdigo a seguir mostra um padro de design comum para o destrutor Dispose , usando um
bloco Using e um bloco Try...Finally equivalente.
Visual Basic

Copiar Cdigo
Sub DemonstrateUsing()
Using d As New Derived
' Code to use the Derived object goes here.
End Using
End Sub

Sub DemonstrateTry()
Dim d As Derived = Nothing
Try
d = New Derived
' Code to use the Derived object goes here.
Finally
' Call the Dispose method when done, even if there is an
exception.
If Not d Is Nothing Then
d.Dispose()
End If
End Try
End Sub
O prximo exemplo cria um objeto usando um construtor com parmetros e em seguida, chama
destrutores quando o objeto no for mais necessrio.
Observao:
Embora este exemplo use Collect para demonstrar os mtodos que o coletor de lixo chamar Dispose
mtodos, em geral, voc deve permitir que o ComComumComum Idioma Tempo de execuo (CLR)
Gerenciar lixo coleo.
Visual Basic

Copiar Cdigo
Sub TestConstructorsAndDestructors()
' Demonstrate how the Using statement calls the Dispose method.
Using AnObject As New ThisClass(6)
' Place statements here that use the object.
MsgBox("The value of ThisProperty after being initialized " &
_
" by the constructor is " & AnObject.ThisProperty & ".")
End Using

' Demonstrate how the garbage collector calls the Finalize method.
Dim AnObject2 As New ThisClass(6)
AnObject2 = Nothing
GC.Collect()
End Sub

Public Class BaseClass
Sub New()
MsgBox("BaseClass is initializing with Sub New." )
End Sub

Protected Overrides Sub Finalize()
MsgBox("BaseClass is shutting down with Sub Finalize." )
' Place final cleanup tasks here.
MyBase.Finalize()
End Sub
End Class

Public Class ThisClass
Inherits BaseClass
Implements IDisposable

Sub New(ByVal SomeValue As Integer)
' Call MyBase.New if this is a derived class.
MyBase.New()
MsgBox("ThisClass is initializing with Sub New." )
' Place initialization statements here.
ThisPropertyValue = SomeValue
End Sub

Private ThisPropertyValue As Integer
Property ThisProperty() As Integer
Get
CheckIfDisposed()
ThisProperty = ThisPropertyValue
End Get
Set(ByVal Value As Integer)
CheckIfDisposed()
ThisPropertyValue = Value
End Set
End Property

Protected Overrides Sub Finalize()
MsgBox("ThisClass is shutting down with Sub Finalize." )
Dispose(False)
End Sub

' Do not add Overridable to this method.
Public Overloads Sub Dispose() Implements IDisposable.Dispose
MsgBox("ThisClass is shutting down with Sub Dispose." )
Dispose(True)
GC.SuppressFinalize( Me)
End Sub

Private disposed As Boolean = False
Public Sub CheckIfDisposed()
If Me.disposed Then
Throw New ObjectDisposedException( Me.GetType().ToString, _
"This object has been disposed." )
End If
End Sub

Protected Overridable Overloads Sub Dispose( _
ByVal disposing As Boolean)
MsgBox("ThisClass is shutting down with the Sub Dispose
overload.")
' Place final cleanup tasks here.
If Not Me.disposed Then
If disposing Then
' Dispose of any managed resources.
End If
' Dispose of any unmanaged resource.

' Call MyBase.Finalize if this is a derived class,
' and the base class does not implement Dispose.
MyBase.Finalize()
End If
Me.disposed = True
End Sub

End Class
Quando voc executa esse exemplo, a classe ThisClass chama o construtor Sub New da classe
BaseClass. Depois que o construtor da classe base finalizar, a classe ThisClass executa as
instrues restantes em Sub New que inicializam um valor para a propriedade ThisProperty.
Quando a classe no for mais necessria, o destrutor Dispose chamado em ThisClass.
Este exemplo ilustra o seguinte:
BaseClass is initializing with Sub New.
ThisClass is initializing with Sub New.
The value of ThisProperty after being initialized by the constructor is 6.
ThisClass is shutting down with Sub Dispose.
ThisClass is shutting down with the Sub Dispose overload.
BaseClass is shutting down with Sub Finalize.
BaseClass is initializing with Sub New.
ThisClass is initializing with Sub New.
ThisClass is shutting down with Sub Finalize.
ThisClass is shutting down with the Sub Dispose overload.
BaseClass is shutting down with Sub Finalize.

Propriedades de Classe, Campos e Mtodos
Em geral, os campos e propriedades representam informaes sobre um objeto, enquanto os
mtodos representam aes que um objeto pode executar.
Os tpicos a seguir descrevem os mecanismos para adicionar propriedades, campos e mtodos
classes e lidar com problemas associados com esses itens.
Nesta seo
Como: Adicionar campos e propriedades a uma classe
Fornece informaes sobre como declarar campos e propriedades.
Propriedades e Procedimentos de Propriedades
Explica como procedimetos Property funcionam e como implementar tipos de
propriedades comuns.
Propriedade procedimentos vs. Campos
Ajuda a decidir quando usar campos para armazenar dados em uma classe, e quando as
propriedades so uma melhor opo.
Mtodos de classe
Descreve os procedimentos pblicos que voc adiciona sua classe.
Propriedades vs. Mtodos
Ajuda a decidir se a funcionalidade desejada melhor implementada como uma
propriedade ou um mtodo.
Propriedades Padro
Descreve as propriedades usadas quando nenhuma propriedade especfica chamada.
Propriedades e mtodos sobrecarregados
Descreve como definir Mltiplo propriedades ou mtodos com o mesmo nome, mas
trabalhar com dados diferentes tipos.
Sobrescrevendo propriedades e mtodos
Discute redefinir uma propriedade herdada ou mtodo.

Como: Adicionar campos e propriedades a uma classe
Voc pode usar Ambos campos e propriedades para armazenar informaes em um objeto.
Embora os campos e propriedades sejam quase indistinguveis da perspectiva do aplicativo cliente,
elas so declaradas diferente dentro de uma classe. Enquanto os campos so variveis Pblico
simplesmente que expe uma classe, o propriedades usar Property procedimentos para controlar
como os valores sero definidos ou retornados.
Para adicionar um campo a uma classe
y Declare uma varivel Pblico na definio de classe, como no cdigo a seguir:
Visual Basic

Copiar Cdigo
Class ThisClass
Public ThisField As String
End Class
Para adicionar uma propriedade para uma classe
1. Declare uma varivel local dentro da classe para armazenar o valor da propriedade. Esta
etapa necessria porque propriedades no alocar qualquer armazenamento por conta
prpria. Para proteger seus valores contra modificao direta, variveis usadas para
armazenar valores de propriedade devem ser declarados como Private.
2. Iniciar declaraes de propriedade com modificadores, como Public e Shared, conforme
apropriado. Use a palavra-chave Property declare o nome da propriedade e declare o
tipo de dados que a propriedade armazena e retorna.
3. Defina Get e Set procedimentos de propriedade dentro da definio de propriedade.
Procedimentos de propriedade Get so usados para retornar o valor de uma propriedade
e so basicamente equivalente para funes na sintaxe. Eles aceitam sem argumentos e
podem ser usados para retornar o valor de particulares variveis Local declaradas dentro
da classe usada para armazenar o valor da propriedade. Procedimentos de propriedade
Set so usados para definir o valor de uma propriedade; eles tm um parmetro,
normalmente chamado Value, com o mesmo tipo de dados como a propriedade
propriamente dito. Sempre que o valor da propriedade alterado, Value passado para
o procedimento de propriedade Set, onde ele pode ser validado e armazenado em uma
varivel local.
4. Encerrar Get e procedimentos de propriedade de Set com End Get e End Set instrues
conforme apropriado.
5. Encerrar o Bloquear de propriedade com uma instruo de End Property.
Observao:
Se voc estiver trabalhando na Visual Studio ambiente de desenvolvimento integrado (IDE), voc
pode direcion-la a fim de criar Vazio Get e os procedimentos de propriedade Set. Type
Property PropName As DataType (where PropName is the name of your property, and DataType is a
specific data type, such as Integer), and the property procedures appear in the Code Editor.
6. O exemplo a seguir declara uma propriedade em uma classe:
7. Visual Basic
8.
9. Copiar Cdigo
10. Class ThisClass
11. Private m_PropVal As String
12. Public Property One() As String
13. Get
14. ' Return the value stored in the local variable.
15. Return m_PropVal
16. End Get
17. Set(ByVal Value As String)
18. ' Store the value in a local variable.
19. m_PropVal = Value
20. End Set
21. End Property
22. End Class
23. Quando voc cria uma instncia de ThisClass e define o valor da propriedade One, o
procedimento Set da propriedade chamado e o valor passado no parmetro Value, que
armazenado em um varivel local denominado m_PropVal. Quando o valor da
propriedade recuperado, o procedimento Get da propriedade chamado como uma
funo e retorna o valor armazenado na varivel local m_PropVal.


Propriedades e Procedimentos de Propriedades
Voc pode usar as propriedades e campos para armazenar informaes em um objeto. Enquanto
os campos so simplesmente variveis pblicas, propriedades usam procedimentos de propriedade
para controlar como os valores so definidos ou retornados. Procedimentos de propriedades so
blocos de cdigo declarados dentro de definies de propriedade que voc pode usar para
executar cdigo quando um valor da propriedade definido ou recuperado.
Visual Basic tem dois tipos de procedimentos de propriedade: os procedimentos de propriedade
Get para recuperar um valor de propriedade e os procedimentos de propriedade Set para atribuir
um valor a uma propriedade. Por exemplo, uma propriedade que armazena o saldo de uma conta
bancria pode usar cdigo em um procedimento de propriedade Get para postar juros e verificar
taxas de servio antes de retornar o saldo disponvel. Voc poderia ento utilizar um procedimento
de propriedade Set para validar o saldo e impedir que ele seja atualizado incorretamente.
Resumindo, procedimento de propriedade permitem a um objeto proteger e validar seus prprios
dados.
O fragmento de cdigo a seguir compara como campos e propriedades validam valores.
Visual Basic

Copiar Cdigo
Protected Sub TestFieldsAndProperties()
' Assume, for this example, that the only valid values for
' the field and property are numbers less than 10.
Dim NewClass As New ThisClass

' Test data validation.

' Works because there is no data validation .
NewClass.ThisField = 36
' Will print 36.
MsgBox("ThisField = " & NewClass.ThisField)

' The attempt to set the field to a value greater than 10 will
silently fail.
NewClass.ThisProperty = 36
' The next statement will print the old value of 0 instead.
MsgBox("ThisProperty = " & NewClass.ThisProperty)
End Sub

Public Class ThisClass
' Declare a field.
Public ThisField As Integer
' Field used for Property Set operations.
Private thisPropertyValue As Integer = 0
' Declare a property.
Public Property ThisProperty() As Integer
Get
Return thisPropertyValue
End Get
Set(ByVal Value As Integer)
' Only allow Set operation for values less than 10.
If Value < 10 Then thisPropertyValue = Value
End Set
End Property
End Class
O procedimento TestFieldsAndPropertiescria uma instncia da classe e define e recupera os
valores dos campos e propriedades. Por questo de neste exemplo, presume-se que os valores
somente vlidos so nmeros Menoses do que 10. Porque existe nenhuma maneira para validar os
valores atribudos aos campos, Configurao o campo valor 36 permitido. A propriedade, no
entanto, somente executa Atribuio para nmeros menores do que 10, portanto, a tentativa para
defini-la para 36 ignorada.
Propriedades somente leitura e somente gravao
A maioria das propriedades possuem os procedimentos de propriedade Get e Set , que voc pode
usar para ler e modificar o valor armazenado. No entanto, voc pode usar os modificadores
ReadOnly ou WriteOnly para evitar que propriedades sejam modificadas ou lidas.
Propriedades somente leitura no podem ter procedimento de propriedade Set; tais propriedades
so teis para itens que voc deseja expor, mas no permite que sejam modificados. Por
exemplo, voc pode usar uma propriedade somente leitura para fornecer a velocidade do
processador de um computador.
Propriedades somente gravao no podem ter procedimentos de propriedade Get e so teis
para configurar objetos com dados que no devem ou no podem ser armazenados no objeto.Por
exemplo, uma propriedade somente gravao pode ser usada para pegar uma senha e alterar o
estado do objeto sem armazenar a senha.
Observao:
Verses anteriores do Visual Basic suporte Let propriedade procedimentos para uso ao atribuir a
objetos em Propriedades. Visual Basic elimina a necessidade para Let procedimentos de propriedade
porque o objeto atribuio tratada como qualquer outro tipo de atribuio.

Propriedade procedimentos vs. Campos
Propriedades e campos Ambos armazenar e recuperar informaes em um objeto. Sua
semelhana pode dificultar a determinar qual a melhor opo programao em um
maiscminsc de determinado.
Use os procedimentos de propriedade quando:
y Voc precisa controlar quando e como um valor definido ou recuperado.
y A propriedade tem um conjunto bem definido de valores que precisam ser validados.
y Configurao o valor causa alguma Alterar perceptvel no estado do objeto, como uma
propriedade IsVisible.
y Configurao a propriedade faz com que as alteraes Outro variveis internas ou para os
valores das Outro propriedades.
y Um conjunto de etapas deve ser executado antes que a propriedade pode ser definida ou
recuperada.
Use campos quando:
y O valor de um tipo self-validating. Por exemplo, um erro ou converso de dados
Automtico ocorre se um valor Outro que True ou False atribudo a uma varivel
Boolean.
y Qualquer valor no intervalo de suporte para o tipo de dados vlido. Isso verdadeiro de
muitos propriedades do tipo Single ou Double.
y A propriedade um tipo de dados String, e no h nenhuma restrio no tamanho ou
valor da Cadeia de Caracteres de.

Mtodos de classe
Os mtodos de uma classe so somente procedimentos Sub ou Function declarados dentro da
classe. Por exemplo, para criar um mtodo Withdrawalde uma classe denominada Account, voc
poderia adicionar essa funo Public ao mdulo de classe:
Visual Basic

Copiar Cdigo
Public Function WithDrawal(ByVal Amount As Decimal, _
ByVal TransactionCode As Byte) As Double
' Add code here to perform the withdrawal,
' return a transaction code,
' or to raise an overdraft error.
End Function
Mtodos compartilhados
Mtodos compartilhados podem ser chamados diretamente da classe sem primeiro criar uma
instncia da classe. Mtodos compartilhados so teis quando voc no deseja um mtodo a ser
associado uma instncia especfica de uma classe. Mtodos compartilhados no podem ser
declarados usando os modificadores Overridable, NotOverridable, ou MustOverride. Mtodos
declarados em mdulos so implicitamente compartilhados e no possvel usar o modificador
Shared explicitamente.
Exemplo
Visual Basic

Copiar Cdigo
Class ShareClass
Shared Sub SharedSub()
MsgBox("Shared method." )
End Sub
End Class

Sub Test()
' Call the method.
ShareClass.SharedSub()
End Sub
Protegendo detalhes de implementao
Procedimentos utilitrios que so usados internamente por uma classe devem ser declarados como
Private,Protected, ou Friend. Restringir a acessibilidade de tais mtodos protege os
desenvolvedores que usam os objetos, permitindo que seja possvel fazer alteraes futuras sem
afetar o cdigo que utiliza os objetos.
Proteger os detalhes da implementao de um objeto outro aspecto do encapsulamento .
Encapsulamento permite que voc melhorar o desempenho dos mtodos, ou alterar
completamente a maneira como o mtodo implementado, sem ter de alterar o cdigo que utiliza
o mtodo.

Propriedades vs. Mtodos
Propriedades e mtodos so similares no fato de que ambos so implementados como
procedimentos que aceitam argumentos. Em geral, propriedades armazenam dados para um
objeto, o mtodos so aes as quais pode ser requisitado a um objeto que realize. Algumas
caractersticas de objeto so obviamente propriedades, como Name, e algumas so obviamente
mtodos, como Move e Show. Em outros casos, no bvio quais membros de classe devam ser
propriedades e quais devam ser mtodos. Por exemplo, o mtodo Item de uma classe de coleo
armazena e recupera dados e pode ser implementado como uma propriedade indexada. Por outro
lado, tambm razovel implementar Item como um mtodo.
Propriedade sintaxe vs.Sintaxe do mtodo
Um modo de se decidir como implementar um membro de classe considerar como voc deseja
que ele seja usado. Embora a sintaxe para recuperar informaes de uma propriedade
parametrizada seja idntica sintaxe usada com um mtodo implementado como uma funo, a
sintaxe para modificar tal valor ligeiramente diferente. Por exemplo, se voc implementar o
membro de uma classe como uma propriedade, a sintaxe a seguir descreve como ele deve ser
usado:
ThisObject.ThisProperty(Index) = NewValue
Se voc implementar o membro de classe como um mtodo, ento o valor que est sendo
modificado precisa ser um argumento. O fragmento de cdigo a seguir descreve o uso equivalente
de sintaxe:
ThisObject.ThisProperty(Index, NewValue)
Mensagens de erro
Outro fator a se considerar quando se escolhe como implementar um membro de classe que tipo
de mensagens ser gerado quando sua classe for usada incorretamente. Se algum tenta
acidentalmente designar um valor a uma propriedade somente-leitura, uma mensagem de erro
retornada diferente da resposta para uma chamada similar a um mtodo. Membros de classe
implementados corretamente retornam mensagens de erro que so fceis de se interpretar.

Propriedades Padro
Uma propriedade que aceita argumentos pode ser declarada como a propriedade padro para uma
classe. Uma propriedade padro a propriedade que o Visual Basic usar quando nenhuma
propriedade especfica for denominada para um objeto. Propriedades padro so teis porque elas
permitem que voc faa seu cdigo-fonte mais compacto, omitindo nomes de propriedades usados
com freqncia.
Os melhores candidatos para propriedades padro so as propriedades que aceitam parmetros e
que voc acha que sero usadas com mais freqncia. Por exemplo, a propriedade Item uma
boa opo para a propriedade padro de uma classe coleo porque usada com freqncia.
As seguintes regras se aplicam s propriedades padro:
y Um tipo pode ter apenas uma propriedade padro, incluindo propriedades herdadas de
um classe base. H uma exceo a essa regra. Uma propriedade padro definida em um
classe base pode ser sombreada por outra propriedade padro em um classe derivada.
y Se uma propriedade padro de uma classe base sombreada por uma propriedade que
no seja padro, em um classe derivada, a propriedade padro ainda ser acessvel
usando a sintaxe da propriedade padro.
y Uma propriedade padro no pode ser Shared ou Private.
y Se uma propriedade sobrecarregada for uma propriedade padro, todas as propriedades
padro como o mesmo nome tambm devero especificar Default.
y As propriedades padro devem aceitar pelo menos um argumento.
Exemplo
O exemplo a seguir declara uma propriedade que contm uma matriz de seqncias de caracteres
como a propriedade padro para uma classe:
Visual Basic

Copiar Cdigo
Class Class2
' Define a local variable to store the property value.
Private PropertyValues As String()
' Define the default property.
Default Public Property Prop1(ByVal Index As Integer) As String
Get
Return PropertyValues(Index)
End Get
Set(ByVal Value As String)
If PropertyValues Is Nothing Then
' The array contains Nothing when first accessed.
ReDim PropertyValues(0)
Else
' Re-dimension the array to hold the new element.
ReDim Preserve PropertyValues(UBound(PropertyValues) +
1)
End If
PropertyValues(Index) = Value
End Set
End Property
End Class
Acessando Propriedades Padro
Voc pode acessar as propriedades padro usando a sintaxe abreviada. Por exemplo, o fragmento
de cdigo a seguir usa o padro e a sintaxe da propriedade padro:
Visual Basic

Copiar Cdigo
Dim C As New Class2
' The first two lines of code access a property the standard way.

' Property assignment.
C.Prop1(0) = "Value One"
' Property retrieval.
MsgBox(C.Prop1(0))

' The following two lines of code use default property syntax.

' Property assignment.
C(1) = "Value Two"
' Property retrieval.
MsgBox(C(1))

Propriedades e mtodos sobrecarregados
Sobrecarga a criao de mais de um procedimento, construtor de instncia ou propriedade em
uma classe com o mesmo nome mas tipos de argumento diferente.
Sobrecarga de uso
Sobrecarga especialmente til quando o seu modelo de objeto determina que voc utilizar
nomes idnticos para procedimentos que operam em diferentes tipos de dados. Por exemplo, uma
classe que pode exibir vrios tipos de dados diferentes poderia ter procedimentos Display que
esta aparncia:
Visual Basic

Copiar Cdigo
Overloads Sub Display(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
Sem a sobrecarga, voc precisar criar nomes distintos para cada procedimento, mesmo que eles
fazem o mesmo, conforme mostrado Avanar:
Visual Basic

Copiar Cdigo
Sub DisplayChar(ByVal theChar As Char)
' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
' Add code that displays Double data.
End Sub
Sobrecarga torna mais fcil usar propriedades ou mtodos porque ele fornece uma variedade de
tipos de dados que podem ser usados. Por exemplo, o mtodo sobrecarregado Display discutido
anteriormente pode ser chamado com qualquer uma das linhas de cdigo a seguir:
Visual Basic

Copiar Cdigo
' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)
Em tempo de execuo, Visual Basic chama o procedimento correto com base nos tipos dados dos
parmetros que voc especificar.
Observao:
Sobrecarga, substituio e sombreamento so conceitos similares que podem ser facilmente
confundidos. Para obter mais informaes, consulte Introduo a Objetos no Visual Basic.
Sobrecarga de regras
Voc criar um membro sobrecarregado para uma classe adicionando dois ou mais propriedades ou
mtodos com o mesmo nome. Exceto para membros derivados sobrecarregados, cada membro
sobrecarregado deve ter listas de parmetros diferentes, e os itens a seguir no podem ser usados
como um diferenciador recurso quando a sobrecarga de uma propriedade ou um procedimento:
y Modificadores, como ByVal ou ByRef, que Aplicar para um membro ou parmetros de
membro.
y Nomes de parmetros
y Tipos de procedimentos de retorno
A palavra-chave Overloads opcional durante sobrecarga, mas se nenhum membro
sobrecarregado usa a palavra-chave Overloads, em seguida, Tudo outros membros
sobrecarregados com o mesmo nome devem tambm especificar esta palavra-chave.
Classes derivadas podem sobrecarregar membros herdados com membros que possuem
parmetros idnticos e tipos de parmetro, um processo conhecido como sombreamento por nome e
assinatura. Se a palavra-chave Overloads usada quando sombreamento por nome e assinatura,
implementao da classe derivada de membro ser ser usada em vez da implementao da classe
base e Tudo as Outro sobrecargas para esse membro estaro disponveis para instncias da classe
derivada.
Se a palavra-chave Overloads for omitida quando um membro herdado com um membro que
tenha parmetros idnticos e tipos de parmetro de sobrecarga, em seguida, a sobrecarga ser
denominado sombreamento pelo nome. Sombreamento pelo nome, substitui a implementao
herdada de um membro, e torna Tudo as Outro sobrecargas indisponvel para instncias de classe
derivada e seus decedents.
O Overloads e Shadows modificadores no podem Ambos ser usado com a mesma propriedade
ou mtodo.
Exemplo
O exemplo a seguir cria mtodos sobrecarregados que aceitar um String ou representao de
Decimal de um valor em moeda corrente e retornar uma Cadeia de Caracteres contendo o
imposto sobre vendas.
Para usar esse exemplo para criar um mtodo sobrecarregado
1. Abrir um novo projeto e adicionar uma classe chamada TaxClass.
2. Adicione o seguinte cdigo classe TaxClass:
Visual Basic

Copiar Cdigo
Public Class TaxClass
Overloads Function TaxAmount(ByVal decPrice As Decimal, _
ByVal TaxRate As Single) As String
TaxAmount = "Price is a Decimal. Tax is $" & _
(CStr(decPrice * TaxRate))
End Function

Overloads Function TaxAmount(ByVal strPrice As String, _
ByVal TaxRate As Single) As String
TaxAmount = "Price is a String. Tax is $" & _
CStr((CDec(strPrice) * TaxRate))
End Function
End Class
3. Adicionar o procedimento a seguir ao seu formulrio.
Visual Basic

Copiar Cdigo
Sub ShowTax()
' 8% tax rate.
Const TaxRate As Single = 0.08
' $64.00 Purchase as a String.
Dim strPrice As String = "64.00"
' $64.00 Purchase as a Decimal.
Dim decPrice As Decimal = 64
Dim aclass As New TaxClass
'Call the same method with two different kinds of data.
MsgBox(aclass.TaxAmount(strPrice, TaxRate))
MsgBox(aclass.TaxAmount(decPrice, TaxRate))
End Sub
4. Adicionar um boto para seu formulrio e a chamada a procedimento ShowTax do evento
Button1_Click do boto.
5. Executar o projeto e clique no boto no formulrio para testar o procedimento
sobrecarregado ShowTax.
Em tempo de execuo, o compilador escolhe a funo sobrecarregada apropriada que
corresponde aos parmetros sendo usados. Quando voc Clique o boto, o mtodo
sobrecarregado chamado pela primeira vez com um parmetro de Price que uma Cadeia de
Caracteres e a mensagem, "preo uma Cadeia de Caracteres. Imposto $ 5.12" exibida.
TaxAmount chamado com um valor de Decimal a segundo tempo e a mensagem, "preo um
decimal. Imposto $ 5.12" exibida.

Sobrescrevendo propriedades e mtodos
Um classe derivada herda as propriedades e mtodos definidos no sua classe base. Isso til
porque voc pode reutilizar esses itens quando apropriado para a classe derivada. Se a
propriedade ou mtodo no classe base marcado com a palavra-chave Overridable, voc pode
definir uma nova implementao para o membro a classe derivada. Use a palavra-chave
Overrides para sombrear o membro redefinindo-o na classe derivada. Isso til quando voc no
pode usar o membro da forma que est.
Na prtica, membros substitudos so geralmente usados para implementar polimorfismo. Para
obter mais informaes, consulte Polimorfismo.
As seguintes regras se aplicam a mtodos substituintes.
y Voc pode substituir somente os membros que so marcados com a palavra-chave
Overridable em suas classe base.
y Por padro, propriedades e mtodos so NotOverridable.
y Membros substitudos devem ter os mesmos argumentos como os membros herdados a
partir de classe base.
y A nova implementao de um membro pode chamar a implementao original na classe
pai especificando MyBase antes do nome do mtodo.
Observao:
Sobrecarga, substituio e sombra so conceitos semelhantes que podem ser fceis de confundir.
Para obter mais informaes, consulte Introduo a Objetos no Visual Basic.
Exemplo
Suponha que voc queira definir classes para tratar a folha de pagamento. Voc pode definir uma
classe Payroll genrica que contm um mtodo RunPayroll que calcula da folha de pagamento
de uma semana tpica. Voc poderia ento utilizar Payroll como uma classe base de uma classe
BonusPayroll mais especializada, que pode ser usada ao distribuir bnus aos funcionrios.
A classe BonusPayroll pode herdar e substituir, o mtodo PayEmployee definido na classe base
Payroll.
O exemplo a seguir define uma classe base, Payroll, e um classe derivada, BonusPayroll, que
substitui um mtodo PayEmployee herdado. Um procedimento, RunPayroll, cria e, em seguida,
passa um objeto Payroll e um objeto BonusPayroll para uma funo, Pay,que executa o
mtodo PayEmployee dos dois objetos.
Visual Basic

Copiar Cdigo
Const BonusRate As Decimal = 1.45D
Const PayRate As Decimal = 14.75D

Class Payroll
Overridable Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal

PayEmployee = HoursWorked * PayRate
End Function
End Class

Class BonusPayroll
Inherits Payroll
Overrides Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal

' The following code calls the original method in the base
' class, and then modifies the returned value.
PayEmployee = MyBase.PayEmployee(HoursWorked, PayRate) *
BonusRate
End Function
End Class

Sub RunPayroll()
Dim PayrollItem As Payroll = New Payroll
Dim BonusPayrollItem As New BonusPayroll
Dim HoursWorked As Decimal = 40

MsgBox("Normal pay is: " & _
PayrollItem.PayEmployee(HoursWorked, PayRate))
MsgBox("Pay with bonus is: " & _
BonusPayrollItem.PayEmployee(HoursWorked, PayRate))
End Sub

Colees em Visual Basic
Em termos gerais, uma coleo um objeto usado para agrupar e gerenciar objetos relacionados.
Por exemplo, todo Form possui uma coleo de controles. (Voc pode acessar essa coleo
atravs do formulrio de prorpiedade Controls.) Essa coleo um objeto que representa todos os
controles naquele formulrio formulrio. Ele permite que voc recupere um controle na coleo
por seu ndice, percorra os elementos da coleo usando um For each... Avanar instruo (Visual
Basic) .
No entanto, existem vrios tipos de colees, e diferem uns dos outros de vrias maneiras.
Diferentes tipos das colees
Visual Basic tambm fornece uma classe Collection, com o qual voc pode definir e criar suas
prprias colees. Como uma coleo Controls do formulrio, a classe Collection tambm fornece
a funcionalidade interna para repetir elementos usando For Each... Next e para recuperar os
elementos pelo ndice. For more information, see Objetos de Coleo (Visual Basic).
No entanto, os dois tipos de colees no interagem uns com os outros. Por exemplo, o cdigo a
seguir gera um erro do compilador.
Dim localControls As Collection
' The following line generates a COMPILER ERROR.
localControls = Me.Controls()
As colees so incompatveis porque a coleo Controls uma coleo .NET Framework,
enquanto a varivel localControls um Visual Basic Collection. Os dois tipos de colees so
implementados a partir de classes diferentes. Seus mtodos so semelhantes, mas no idnticos,
e seus esquemas indexao so diferentes.
Colees de base zero e base um.
Uma coleo pode ser com base nula ou com base em um, dependendo no que est o seu ndice
inicial. A significa anterior que o ndice do primeiro item na coleo 0 e os meios ltima que ele
1. An example of a zero-based collection is the .NET Framework Controls collection, discussed
earlier on this page. O objeto Visual Basic Collection um exemplo de uma coleo com base em
um.
Colees com base em um podem ser mais intuitivas para Visual Basic Usurios, porque o ndice
varia de 1 ao valor da Propriedades de Contagem ( Objeto de coleo)., que retorna o nmero de
itens em uma coleo. O ndice de uma coleo com base zero, por outro lado, varia de 0 por
meio de um menor que o valor da propriedade Count. Isso pode ser apropriado quando os valores
de ndice so deslocamentos de um valor de base ou correspondem aos membros de uma
enumerao baseada em zero.
Colees .NET Framework so baseadas em zero com o objetivo de padronizao. A classe Visual
Basic Collection baseada em um para fins de compatibilidade com verses anteriores.
ndices e valores chave
As instncias da classe Visual Basic Collection permitem que voc acesse um item usando um
ndice numrico ou uma String chave. Voc pode adicionar itens aos objetos Visual Basic
Collection especificando ou no uma chave. Se voc adicionar um item sem uma chave, voc
deve usar seu ndice numrico para acess-lo.
Por outro lado, colees como System.Collections..::.ArrayList permitem apenas um ndice
numrico. No possvel associar as chaves com os elementos dessas colees, a menos que voc
crie seu prprio mapeamento com base, por exemplo, em uma matriz String pressionando as
teclas.
Adicionando e removendo itens
Colees tambm diferem em se ou no voc pode adicionar itens a elas e em caso afirmativo,
como esses itens so adicionados. Como o objeto Visual Basic Collection uma ferramenta de
programao de uso geral, mais flexvel do que algumas outras colees. Ele tem um Adicionar
mtodo (coleo Objeto) para colocar Itens em coleo e um Mtodo Remove (Objeto Coleo)
para retirar itens fora.
Certas colees especializadas, por outro lado, no permitem que voc adicione ou remova
elementos usando cdigo. Por exemplo, a propriedade CheckedListBox..::.CheckedItems retorna
uma coleo de referncias a itens pelo ndice, mas seu cdigo no pode adicionar ou remover
itens da coleo. Somente o usurio pode fazer isso ao marcar ou desmarcar a caixa apropriada
na interface do usurio. Assim no h nenhum Add ou mtodo Remove para esta coleo.

Eventos no Visual Basic
Um evento uma mensagem enviada por um objeto anunciando que algo ocorreu. Eventos so
implementados utilizando delegados, uma forma de ponteiro de funo orientado a objeto, que
permite que uma funo seja invocada indiretamente por meio de uma referncia funo.
Nesta seo
Eventos e manipuladores de eventos
Proporciona uma viso geral de eventos, manipuladores de evento, e da terminologia
associada.
WithEvents e Clusula Handles
Demonstra como usar a palavra-chave WithEvents e a clusula Handles para associar
um evento com um manipulador de evento.
AddHandler e RemoveHandler
Demonstra como usar as declaraes AddHandler e RemoveHandler para associar
dinamicamente um evento com um manipulador de evento.
Como: Adicionar eventos a uma classe
Descreve o processo de definio de eventos.
Como: Criar manipuladores de eventos no Editor de cdigo do Visual Basic
Fornece instrues para uso do Visual Basic Code Editor para escrever cdigo para
responder a eventos.
Como: Elevar um evento (Visual Basic)
Demonstra como definir um evento e usa a instruo RaiseEvent para fazer com que o
evento ocorra
Como: Criar um evento e o manipulador (Visual Basic)
Demonstra como definir um evento e um manipulador de eventos, e usa a instruo
AddHandler para associ-los.
Como: Gravar Eventos manipuladores
Demonstra como escrever manipuladores de evento usando a clusula Handles ou a
declarao AddHandler.
Como: Manipular eventos no Visual Basic
Define uma classe que lana um evento quando o mtodo CauseEvent chamado.
Demonstra Passo a passo: Declarando e disparando eventos
Fornece uma descrio passo a passo de como declare e disparar eventos de uma classe.
Demonstra Passo a passo: Tratamento de eventos
Demonstra como escrever um procedimento de manipulador de eventos.
Como: declare eventos que evitar o bloqueio
Demonstra como definir um evento personalizado que permite que seus manipuladores de
evento sejam chamados assincronamente.
Como: declare eventos que conservar o uso de memria
Demonstra como definir um evento personalizado que utiliza a memria somente quando
o evento manipulado.
Soluo de problemas herdados manipuladores de eventos no Visual Basic
Lista problemas comuns que surgem com manipuladores evento nos componentes
herdados

Eventos e manipuladores de eventos
Enquanto voc pode visualizar um projeto Visual Studio como uma srie de procedimentos que
executam em uma seqncia, na realidade, a maioria dos programas so orientados a eventos
o que significa que o fluxo de execuo determinado pelas externas ocorrncias chamadas
eventos.
Um evento um sinal que informa a um aplicativo que algo importante ocorreu. Por exemplo,
quando um usurio clica em um controle em um formulrio, o formulrio pode lanar um evento
Click e chamar um procedimento que manipula o evento. Eventos tambm permitem que tarefas
separadas se comuniquem. Digamos que, por exemplo, seu aplicativo execute uma tarefa de
classificao separadamente do aplicativo principal. Se um usurio cancelar a classificao, o
aplicativo pode enviar um evento Cancelar instruindo o processo de classificao para parar.
Termos e Conceitos de Evento
Esta seo descreve os termos e conceitos usados com eventos em Visual Basic.
Declarando Eventos
Voc declara eventos dentro de classes, estruturas, mdulos e interfaces usando a palavra-chave
Event, como no exemplo a seguir:
Visual Basic

Copiar Cdigo
Event AnEvent(ByVal EventNumber As Integer)
Disparando Eventos
Um evento como uma mensagem anunciando que algo importante ocorreu. O ato de transmitir a
mensagem chamado Disparo de evento. Em Visual Basic,voc dispara eventos com a instruo
RaiseEvent, como no exemplo a seguir:
Visual Basic

Copiar Cdigo
RaiseEvent AnEvent(EventNumber)
Eventos devem ser disparados dentro do escopo da classe, mdulo ou estrutura onde eles so
declarados. Por exemplo, um classe derivada no pode disparar eventos herdados de um classe
base.
Remetentes de Evento
Qualquer objeto capaz de dispara um evento um Remetente de Evento,tambm conhecido como
uma fonte de evento. Formulrios, controles e objetos definidos pelo usurio so exemplos de
remetentes de eventos.
Manipuladores de Eventos
Manipuladores de eventos so procedimentos que so chamados quando ocorre um evento
correspondente. Voc pode usar qualquer sub-rotina vlida com uma assinatura correspondente
como um manipulador de eventos. Entretanto, voc no pode usar uma funo como um
manipulador de eventos, porque ela no retorna um valor para a fonte de eventos.
Visual Basic usa uma conveno de nomeclatura padro para manipuladores de eventos que
combina o nome do remetente do evento, um sublinhado e o nome do evento. Por exemplo, o
evento Click de um boto chamado button1 ser nomeado Sub button1_Click.
Observao:
Recomendamos que voc use esta conveno de nomeclatura quando definir manipuladores de
eventos para seus prprios eventos, mas ela no necessrio; voc pode usar qualquer nome de
sub-rotina vlido.
Associando Eventos Manipuladores de Eventos
Antes uma manipulador de eventos se tornar til, voc deve primeiro associ-lo com um evento
usando uma instruo Handles ou AddHandler.
A instruo WithEvents e a clusula Handles fornecem uma maneira declarativa de especificar
os manipuladores de eventos. Eventos disparados por um objeto declarado com WithEvents
podem ser tratados por qualquer sub-rotina com uma clusula Handles que nomeie este evento.
Embora a clusula Handles seja a maneira padro de associar um manipulador de eventos com
um evento, limitada ao associar eventos com manipuladores de eventos em tempo de
compilao.
As instrues AddHandler e RemoveHandler so mais flexveis do que a clusula Handles. Eles
permitem que voc dinamicamente conecte e desconecte os eventos de um ou mais
manipuladores de eventos em tempo de execuo, e no requerem que voc declare variveis de
objeto usando WithEvents. No entanto, h algumas restries ao usar WithEvents. Para obter
mais informaes, consulte WithEvents e Clusula Handles.
Em alguns casos, como com os eventos associados com os formulrios ou controles, Visual Basic
automaticamente extingue um manipulador de eventos em branco e o associa com um evento.
Por exemplo, quando voc clica duas vezes em um boto de comando em um formulrio no modo
de design, Visual Basic cria um manipulador de eventos em branco e uma varivel WithEvents
para o boto de comando, como no cdigo a seguir:
Visual Basic

Copiar Cdigo
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
End Sub


WithEvents e Clusula Handles
A instruo WithEvents e a clusula Handles fornecem uma maneira declarativa de especificar
os manipuladores de eventos. Um evento gerado por um objeto declarado com a palavra-chave
WithEvents pode ser tratado por qualquer procedimento com uma instruo Handles para esse
evento, conforme mostrado no exemplo o seguir:
Visual Basic

Copiar Cdigo
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass

' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub

' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event." )
End Sub

Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
A instruo WithEvents e a clusula Handles geralmente so a melhor opo para
manipuladores de eventos pois a sintaxe declarativa usada torna mais fcil de codificar, ler e
depurar a manipulao de eventos. No entanto, esteja ciente das seguintes limitaes sobre o uso
de variveis WithEvents:
y No possvel usar uma varivel WithEvents como um varivel de objeto. Ou seja, voc
no pode declar-la como Object voc deve especificar o nome da classe quando voc
declarar a varivel.
y Como eventos compartilhados no so ligados a instncias de classe, voc no pode usar
WithEvents para declarativamente manipular eventos compartilhados. Da mesma forma,
voc no pode usar WithEvents ou Handles para manipular eventos de um Structure.
Em ambos os casos, voc pode usar a instruo AddHandler para manipular esses
eventos.
y No possvel criar matrizes de WithEvents variveis.
y WithEvents variveis permitem a um nico manipulador de eventos manipular um ou
mais tipo de evento, ou um ou mais manipuladores de eventos para manipular o mesmo
tipo de evento.

AddHandler e RemoveHandler
A instruo AddHandler semelhante clusula Handles j que ambas permitem que voc
especifique um manipulador de eventos. Entretanto, AddHandler usado com RemoveHandler,
fornece flexibilidade maior do que a clusula Handles, permitindo que voc adicione, remova e
altere dinamicamente o manipulador de evento associado com um evento. Se voc quiser
manipular eventos compartilhados ou eventos de uma estrutura, voc deve usar AddHandler.
AddHandler leva dois argumentos: o nome de um evento de um remetente de evento, como um
Controlarar e uma expresso que avalia a um delegate. Voc no precisa especificar
explicitamente a classe representante ao usar AddHandler, desde que a declarao AddressOf
sempre retorne uma referncia ao representante. O exemplo a seguir associa um manipulador de
evento com um evento gerado por um objeto.
Visual Basic

Copiar Cdigo
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler, que disconecta um evento de um manipulador de eventos, usa a mesma
sintaxe de AddHandler. Por exemplo:
Visual Basic

Copiar Cdigo
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler

Como: Adicionar eventos a uma classe
Adicionar eventos a uma classe, declarando-os com a instruo Events. A declarao inclui o
nome do evento e os argumentos que ele usa.
Adicionar um evento a uma classe Especifica que um objeto desta classe pode disparar um evento
especfico. Para fazer com que um evento ocorra, voc deve usar a instruo RaiseEvent. Voc
pode usar a palavra-chave Handles ou a instruo de AddHandler para associar o evento com
um procedimento de manipulador de eventos. Eventos devem ser aumentados dentro do escopo
onde elas so declaradas. Por exemplo, um classe derivada no pode disparar eventos herdados
de um classe base.
Observao:
Eventos no podem ter valores de retorno, argumentos opcionais, ou Argumentos de ParamArray.
Para adicionar um evento a uma classe
y Na seo Declaraes do mdulo classe que define a classe, use instruo de Event
declare o evento quaisquer argumentos voc deseja que ele tenha. Por exemplo:
Visual Basic

Copiar Cdigo
Public Event PercentDone(ByVal Percent As Single, _
ByRef Cancel As Boolean)
Como: Criar manipuladores de eventos no Editor de
cdigo do Visual Basic
O Editor de cdigos do Visual Basic oferece uma maneira fcil para criar manipuladores de eventos
para o Formulrios do Windows. Embora ele no permite conectar vrios eventos a um nico
manipulador de eventos (consulte Como: Conectar-se Mltiplo eventos a um Simples manipulador
de eventos do Windows Forms), ele fornece uma maneira rpida e fcil para criar manipuladores
de evento enquanto estiver trabalhando no cdigo do formulrio sem exibir o formulrio na
Windows Forms Designer.
Para criar um manipulador de eventos usando o Visual Basic Code Editor
1. Na caixa Editor de cdigos,da lista Nome da classe , escolha o formulrio ou controle para
que voc deseja criar um manipulador de eventos.
2. Da lista Nome do mtodo na parte superior do Editor de cdigos, escolha o evento para que
voc deseja criar um manipulador de eventos.
Visual Basic cria uma manipulador de eventos e o adiciona classe do formulrio.

Como: Elevar um evento (Visual Basic)
Este exemplo define um evento (TimeExpired) e utiliza a instruo RaiseEvent para fazer com
que o evento ocorra.
Exemplo
Visual Basic

Copiar Cdigo
Public Event TimeExpired(ByVal Status As String)
Public Sub RaiseTimeExpiredEvent()
RaiseEvent TimeExpired("Your time has run out" )
End Sub
Este exemplo de cdigo tambm est disponvel como um trecho de cdigo IntelliSense. No
selecionador de trechos de cdigo, ele est localizado em Visual Basic Language. Para obter mais
informaes, consulte HOW TO: Trechos Inserir em seu cdigo (Visual Basic).
Compilando o cdigo
Este exemplo requer:
y Acesso aos membros do espao de nomes System. Adicione uma declarao Imports se
voc no est qualificando completamente os nomes de membros em seu cdigo. Para
obter mais informaes, consulte Declarao Imports (Tipo e Namespace .NET).
y A instruo Event estar no nvel de classe e no dentro de qualquer procedimento.
y A instruo RaiseEvent pode estar dentro algum procedimento no seu aplicativo.


Como: Criar um evento e o manipulador (Visual Basic)
Este exemplo define um evento, TimeExpired e um manipulador de eventos,
HandleTimeExpired e usa a instruo AddHandler para associ-los.
Exemplo
Visual Basic

Copiar Cdigo
Public Event TimeExpired(ByVal Status As String)
Public Sub HandleTimeExpired( ByVal Status As String)
' Perform desired processing for when time has expired.
MsgBox("HandleTimeExpired caught the TimeExpired event" & _
vbCrLf & "Status = " & Status)
End Sub
Public Sub SetUpEventHandler()
AddHandler TimeExpired, AddressOf HandleTimeExpired
End Sub
Compilando o cdigo
Este exemplo requer:
y Acesso aos membros do espao de nomes System. Adicione uma declarao Imports se
voc no est qualificando completamente os nomes de membros em seu cdigo. Para
obter mais informaes, consulte Declarao Imports (Tipo e Namespace .NET).
y A instruo Event estar no nvel de classe e no dentro de qualquer procedimento.
y A instruo Event e ambos os procedimentos (HandleTimeExpired e
SetUpEventHandler) a serem definidos na mesma classe ou mdulo. Caso contrrio, a
instruo AddHandler deve qualificar o evento e o manipulador para os objetos na qual
eles so definidos.

Como: Gravar Eventos manipuladores
O modo como voc constri um manipulador de eventos depende de como voc deseja associ-lo
com eventos. A maneira padro para criar um manipulador de eventos usar a palavra-chave
Handles com a palavra-chave WithEvents. Visual Basic fornece um segundo forma de manipular
eventos: a instruo AddHandler. AddHandler e RemoveHandler permitem que voc
dinamicamente Iniciar e parada para um evento especfico de manipulao de eventos. Voc pode
usar qualquer uma das abordagens, mas no deve usar ambas WithEvents e AddHandler com o
mesmo evento.
Manipulando Eventos usando WithEvents
A palavra chave WithEvents permite criar variveis de classe ou objeto de nivel mdulo que
podem ser usadas com a clusula Handles em manipuladores de eventos.
Para manipular eventos usando WithEvents e a clusula Handles
1. Crie uma classe simples que contm um evento
Visual Basic

Copiar Cdigo
Class Class1
Public Event AnEvent(ByVal EventNumber As Integer)
End Class
2. Na classe ou mdulo que manipular o evento, use a palavra chave WithEvents para
declarar uma varivel objeto para a fonte de seus eventos, como no exemplo seguinte:
Visual Basic

Copiar Cdigo
Public WithEvents ClassInst As Class1
3. No Editor e Cdigo, escolha a varivel WithEvents que voc acabou de declarar atravs
da lista Nome da Classe na esquerda.
4. Escolha o evento que deve ser manipulado da lista Nome de Mtodo na direita. O Editor de
Cdigo cria um procedimento manipulador de eventos vazio com uma clusula Handles.
Observao:
Esse passo opcional. Voc pode criar o procedimento de manipulador de eventos manualmente
desde que o procedimento que voc criar uma sub-rotina, tem a lista de argumento correto para
coincidir com o evento que est sendo tratado e tem um Clusula de Handles que especifica o
evento sendo manipulado.
5. Adicione o cdigo manipulador de eventos para o procedimento manipulador de eventos
usando os argumentos fornecidos. O cdigo a seguir um exemplo:
Visual Basic

Copiar Cdigo
Public Sub ClassInst_AnEvent( ByVal EventNumber As Integer) _
Handles ClassInst.AnEvent
MsgBox("Received event number: " & CStr(EventNumber))
End Sub
Manipulando Eventos usando AddHandler
Voc pode usar a declarao AddHandler para dinamicamente conectar eventos com
procedimentos manipuladores de eventos.
Para manipular eventos usando AddHandkler
1. Crie uma subrotina para lidar com o evento, como no seguinte exemplo:
Visual Basic

Copiar Cdigo
Public Sub EHandler(ByVal EventNumber As Integer)
MsgBox("Received event number " & CStr(EventNumber))
End Sub
2. Declare uma varivel objeto da classe que a fonte dos eventos que voc deseja
manipular. Diferentemente da varivel WithEvents, isso pode ser uma varivel local num
procedimento. Por exemplo:
Visual Basic

Copiar Cdigo
Public Sub TestAddHandler()
Dim CI As New Class1
End Sub
3. Usando a declarao AddHandlerpara especificar o nome do criador do evento, e a
declarao AddressOf para fornecer o nome de seu manipulador de evento. Por exemplo,
adicione o seguinte cdigo ao final da subrotina TestAddHandler:
Visual Basic

Copiar Cdigo
AddHandler CI.AnEvent, AddressOf EHandler
Qualquer procedimento pode servir como um manipulador de eventos desde que ele
suporte os argumentos corretos para o eventos sendo manipulados.
Usando RemoveHandler para parar de Manipular Eventos
Voc pode usar a declarao RemoveHandler para dinamicamente desconectar eventos dos
procedimentos manipuladores de eventos.
Para parar manipulao de eventos usando RemoveHandler
y Use a declarao RemoveHandler para especificar o nome do criador do evento e a
declarao AddressOf para fornecer o nome do manipulador de evento. A sintaxe das
declaraes RemoveHandler ser sempre compatvel com a declarao AddHandler
usada para comear a manipulao de eventos. Por exemplo:
Visual Basic

Copiar Cdigo
RemoveHandler CI.AnEvent, AddressOf EHandler
Manipulado Eventos Herdados de uma Classe Base
Derived classesclasses that inherit characteristics from a base classcan handle events raised by
their base class using the Handles MyBase statement.
Para manipular eventos de uma classe base
y Declare um manipulador de eventos na classe derivada adicionando uma declarao
Handles MyBase.nomedoevento na declarao de seu evento manipulador de eventos,
onde nomedoevento o nome do evento na classe base manipulada. Por exemplo:
Visual Basic

Copiar Cdigo
Public Class BaseClass
Public Event BaseEvent(ByVal i As Integer)
' Place methods and properties here.
End Class

Public Class DerivedClass
Inherits BaseClass
Sub EventHandler(ByVal x As Integer) Handles
MyBase.BaseEvent
' Place code to handle events from BaseClass here.
End Sub
End Class

You might also like