VB .NET - Usando Delegates

O Visual Basic .NET possui um recurso chamado - Delegate - (vou traduzir : Delegado , de delegar...). Ele oferece uma nova maneira de trabalhar com funções e rotinas.

"Delegate" ou Delegado é o nome usado para descrever um procedimento em VB.NET que permite a você controlar o código que atualmente manipula um evento. (Como um evento Change , Click , Load , etc.).

Um delegate é então uma classe que pode manipular uma referência a um método.

No VB6 o procedimento Command_Click manipulava o evento Click de um botão de comando - Command.  Então você colocava o código  que desejava que fosse executando quando o usuário clicasse neste botão dentro do procedimento Command_Click.

No VB.NET você pode alterar o código que manipula o evento. Ao fazer isto , estamos 'delegando' o evento.

Uma classe delegada possui uma assinatura e somente será capaz de armazenar referências para procedimentos que têm a mesma assinatura (tipos de parâmetros , tipos de retorno). Isto reforça a segurança e evita que você faça uma referência a uma rotina inválida.

Antes de poder criar um Delegado você tem que criar o seu tipo em uma declaração assim :

Public Delegate Function Funcao(String as String) As String

A função acima define um tipo de delegado e como base nela o tipo de delegado Funcao pode ser usado para armazenar a localização de uma função que aceita os parâmetros e o retorno definidos.

Vou dar um exemplo simples para ficar mais claro.

Inicie um novo projeto no VB.NET e no formulário padrão insira um botão de comando - button1 - e uma label - lblIdioma -com o seguinte layout:

O código associado ao evento Click do botão é o seguinte:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

lblIdioma.Text = " Olá, Pessoal ! "

Me.lblIdioma.Font = New System.Drawing.Font("Verdana", 16)

End Sub

O código é simples: quando o usuário clicar no botão - button1 - Diga Olá ! - o evento Click será acionado e o texto - "Olá Pessoal !" será exibido no etiqueta - lblIdioma.

Vamos então entrar com a delegação , inserindo o código abaixo no evento Load do formulário :

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

AddHandler button1.Click, AddressOf cmdIngles

RemoveHandler button1.Click, AddressOf Button1_Click

End Sub

Neste código eu estou delegando o evento do botão de comando Button1.Click para uma rotina -cmdIngles- usando o comando AddressOf (endereço de) . Agora basta criar o código para a rotina que irá ser executada:

Private Sub cmdIngles(ByVal sender As System.Object, ByVal e As System.EventArgs)

lblIdioma.Text = " Hello ! Everybody. "

Me.lblIdioma.Font = New System.Drawing.Font("Verdana", 16)

End Sub

Este código faz o mesmo que o código do evento Click do botão - button1 - a única diferença é que exibe a mensagem em inglês.

Se você executar o projeto,  como a delegação foi colocada no evento Load do formulário , ao clicar no botão de comando a mensagem exibida será no idioma Inglês:

Então para concluir podemos dizer que um delegado é algo parecido com um ponteiro em C++.

Aguarde mais uma artigo VB.NET...  

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?


             Gostou ?  
Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti