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.
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
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