Neste artigo vou revisitar o conceito de Delegate na linguagem VB .NET. |
Na plataforma .NET, um delegate ou delegado é uma variável de tipo de referência que representa um método ou um conjunto de métodos pela manipulação de sua referência.
Da mesma forma que ao declarar uma variável, quando você cria e chama
um procedimento, ele usa uma seção da memória do computador. Esta
seção é seu endereço. Você pode acessar essa área de memória para
chegar ao procedimento, ou, você pode declarar uma variável que
seria usada para acessar a memória usada pelo procedimento.
Um ponteiro de função é um tipo especial de variável que é usado
para acessar uma função usando seu endereço. Para suportar ponteiros
de função, o .NET Framework fornece o conceito de delegates ou
delegados. Um delegado não é uma função real. Ele fornece uma
sintaxe para uma função com a qual ele estaria associado.
Vejamos a seguir como criar, associar e usar um delegate usando a linguagem VB .NET.
Recursos Usados
Criando um Delegate
Antes de
usar um delegado, você tem que criá-lo ou você pode usar um dos delegates
integrados da plataforma .NET (Action(), Func(), Predicate(), etc.). A
fórmula básica para criar um delegado é:
[Modificador]
Delegate Sub/Function
Name (parâmetro (s))
As ReturnType
O fator modificador pode ser Public, Private ou Friend. Isto é
seguido por Delegate Sub ou pela expressão Delegate Function.
Um delegado deve ter um nome: O fator Name. O nome segue as regras
definidas para nomes válidos da linguagem Visual Basic.
Como um delegado é algum tipo de modelo para um procedimento, você deve usar
parênteses. Se este procedimento não aceitar qualquer argumento, você pode
deixar os parênteses vazios.
Se o delegado for associado a um sub-procedimento, não há nenhum tipo de
retorno. Aqui está um exemplo:
Module Teste Delegate Sub Mensagem() End Module |
Se o
delegado for um tipo de função, você deve especificar um tipo de retorno: ReturnType.
Isso pode ser qualquer um dos tipos de dados permitidos pela plataforma
.NET, ou pode ser uma classe.
Se você criar um procedimento associado a um delegado, também poderá
defini-lo como Shared.
Associando um delegado a um
procedimento
Antes de usar um delegado, você deve criar um procedimento com o qual ele
será associado. O procedimento deve usar a mesma sintaxe que o delegado:
Se estiver usando um sub-procedimento, ambos devem ser criados como sub-procedimentos;
Se não houver nenhum argumento, nenhum deles pode tomar um argumento;
Aqui está um exemplo:
Module Exercicio Delegate Sub Mensagem() Private Sub ExibeMensagem() MsgBox("Minha Mensagem") End Sub End Module |
Obtendo o endereço de um
procedimento
Para associar um procedimento a um delegado, você deve atribuir o endereço
do procedimento a uma variável do delegado. Isso significa que você deve
primeiro declarar uma variável para o delegado.
Para ajudá-lo a obter o endereço de um procedimento, o Visual Basic fornece
o operador AddressOf. Para usá-lo, digite-o seguido do nome do
procedimento que implementa o delegado. Atribua essa expressão à variável
declarada a partir do delegado. Aqui está um exemplo:
Delegate Sub Mensagem()
Private Sub ExibirMensagem()
MsgBox("Minha Mensagem")
End Sub
Public Function Principal() As Integer
Dim msg As Mensagem
msg = AddressOf ExibirMensagem
Return 0
End Function
|
Aqui está um
exemplo:
Module Exemplo
Delegate Sub Mensagem()
Private Sub ExibirMensagem()
MsgBox("Minha Mensagem")
End Sub
Public Function Main() As Integer
Dim msg As Mensagem
msg = AddressOf ExibirMensagem
msg()
Return 0
End Function
End Module
|
No nosso exemplo, usamos um sub-procedimento. Da mesma forma, se necessário, você pode criar um delegado como uma função.
Neste caso, você deve definir uma função para associar a esse delegado. Então, você pode usar as mesmas técnicas que seguimos para associá-los.
Delegates e Classes
Além de
utilizar um procedimento podemos também usar um método de uma classe
para associar a um delegado.
Você
pode começar criando a classe e o método. Aqui está um exemplo:
Private Class Exemplo
Public Sub Aviso()
MessageBox.Show ("Um delegado com classe")
End Sub
End Class
|
Exemplo
Naturalmente antes de usar o delegado, você deve declará-lo. Isso é feito
exatamente como anteriormente. O delegado deve ser do mesmo tipo que o
método (sub-procedimento ou função).
Antes de associar o delegado ao método pretendido, declare uma variável para
ele.
Também declare uma variável para a classe. Para associar o método ao delegate, obtenha o endereço do método, através de seu objeto, e atribua-o à variável do delegate.
Depois de ter feito isso, você pode chamar a variável do delegado como se fosse um procedimento. Assim :
Module Module1
Delegate Sub MeuDelegado()
Sub Main()
Dim valor As Integer = Principal()
End Sub
Private Class Exemplo
Public Sub Aviso()
Console.WriteLine("Um delegado com classe")
End Sub
End Class
Public Function Principal() As Integer
Dim meu_delegado As MeuDelegado
Dim exemplo1 As Exemplo = New Exemplo
meu_delegado = AddressOf exemplo1.Aviso
meu_delegado()
Return 0
End Function
End Module
|
Assim, um delegado é na verdade uma classe. A classe é chamada Delegate.
Com base nisso, sempre que você criar um delegado, o nome que você dá é considerado um objeto. Ou seja, o nome que você dá ao delegado se torna um objeto do tipo Delegate.
Assim com base nas características das classes, esse objeto delegado automaticamente se torna equipado com métodos.
Na segunda parte do artigo vamos tratar de Delegates com argumentos e ver como passar delegates como argumentos.
(Disse Jesus) - 'Aquele que tem os
meus mandamentos e os guarda esse é o que me ama; e aquele que me ama será
amado de meu Pai, e eu o amarei, e me manifestarei a ele.'
João 14:21
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net