Delegates em C#.NET

Para quem trabalha com C/C++ já deve ter ouvido falar sobre “CallBack” que é simplesmente passar um ponteiro de uma função como parâmetro para outra, para que possa usar em threads separadas ou como escopo de sua aplicação.

Delegate no .NET C# é semelhante a um ponteiro em C++ , no entanto seus representantes são Type-Safe* (Tipos Seguros). No C# ele pode ser usado como referencia a uma função e ser Invocado quando necessário.

Qualquer delegate é herdado da classe base delegate, que faz parte da biblioteca de classes do .NET. Porém pode ser herdado de classes distintas como o System.Delegate e o System.MulticastDelegate.

Simples …

Se o retorno do delegate for (void) ele é um MulticastDelegate, e suporta inúmeras funções (+=).

Se não ele é um System.Delegate e não suporta o caso acima.

Vamos a seguinte situação: Temos uma thread em execução (BackgroundWorker por exemplo) e ao decorrer da execução do backgroudWorker , é necessario que um valor seja atribuido em um objeto que esta na Thread principal.

Se você simplesmente atribuir o valor ao objeto : Ex. objLabel.Text = “Valor a ser Atribuido”; Será gerada uma exceção de (“Erro de Operação entre Threads”) com a seguinte mensagem :

“Operação entre threads inválida: controle ‘objLabel’ acessado de um thread que não é aquele no qual foi criado.”

Para que isso não aconteça vamos usar um delegate :

Ex.

if (objLabel.InvokeRequired)
objLabel.BeginInvoke((MethodInvoker)delegate {
objLabel.Text = “Valor a ser Atribuido”
});
Com isso atribuirmos o valor diretamente na referencia do objeto em questão.
Este foi um exemplo simples e introdutório sobre como utilizar delegate  no .NET Framework juntamente com a linguagem C#.
Espero ter ajudado.

8 opiniões sobre “Delegates em C#.NET”

  1. Parabens pelo artigo.
    Nunca tinha pesquisado sobre delegate, porque ainda não precisei, mas lendo seu artigo já tive uma pequena noção de como funciona, seria legal mostrar também em um resumo rápido quais outras opções que podemos usar delegate, mas está ótima a explicação, está favoritado o blog.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s