VB .NET  -  O conceito de Delegate revisitado - I


 Neste artigo vou revisitar o conceito de Delegate na linguagem VB .NET.
 
Um delegate ou delegado é uma pessoa que representa uma organização ou um conjunto de pessoas.

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.

 
Nota: A referência pode ser alterada em tempo de execução.

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:

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

Depois de atribuir o endereço do procedimento para a variável do delegado, você pode chamar o delegado como se fosse um procedimento.

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:


José Carlos Macoratti