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 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:
|
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... ![]()
José Carlos Macoratti