Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Delegates - Artigo easy .net Magazine 6
Este artigo aborda conceitos teóricos e práticos essenciais para a boa compreensão do tipo Delegate, presente na plataforma desde o lançamento do .NET Framework 2.0.
[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Easy .net magazine 6
Delegates
Para compreender e utilizar
Do que trata o artigo
Este artigo aborda conceitos teóricos e práticos essenciais para a boa compreensão do tipo Delegate, presente na plataforma desde o lançamento do .NET Framework 2.0. Frequentes dúvidas sobre sua existência, funcionamento e utilidade serão respondidas de modo a deixar o leitor ciente das soluções que utilizam esse tipo de dados e familiarizado com sua aplicabilidade. Ainda no artigo, o leitor encontrará as principais técnicas de manipulação de delegates nos modos single-cast, multi-cast e na orientação a eventos.
Para que serve
O tipo Delegate agrega distintas funcionalidades na programação de um software. Pode-se dizer que todas essas características existentes tendem a flexibilizar o sistema, permitindo que os objetos e as classes que o compõe interajam entre si a fim de que haja maior reusabilidade.
Em que situação o tema é útil
Frequentemente o leitor se deparará com cenários no qual um mesmo ator trabalha com diversos casos de uso. A flexibilização das operações desse ator irá melhorar o design do sistema e futura manutenção. Delegates são úteis em ambientes no qual a mudança já não é mais uma fase, mas um requisito.
Resumo do DevMan
A utilização de delegates é mais comum do que se possa imaginar. Saber como utilizá-los e como o .NET Framework trabalha com eles é essencial para compreender outras funcionalidades do framework, como eventos, funções callback – bastante comuns em plataforma de jogos, como o XNA –, manutenção de estado de objetos, LINQ e muito mais. Este artigo abordará delegates de modo a explicar ao leitor suas distintas funcionalidades, possibilitando, ao mesmo tempo, conhecer toda a sua abrangência no .NET Framework.
Introduzido na versão 2.0 do .NET Framework, o tipo Delegate não é mais do que uma classe especial da plataforma destinada a gerenciar uma ou mais funções associadas a um objeto delegate. Em outras palavras, delegates têm a função de coordenar o comportamento de um método.
Comumente, define-se delegate como um tipo de dado que representa a referência de um método. Embora esteja correta essa definição, nada ou pouco ajuda os desenvolvedores iniciantes na plataforma. Este artigo tem por objetivo explanar esse conceito e elucidar o leitor de suas principais utilizações no desenvolvimento cotidiano.
De fato, delegates é um dos assuntos mais temidos pelos desenvolvedores. É possível encontrar diversos artigos e capítulos de livros dedicados a este tema, mas grande parte já pressupõe que o leitor conheça o assunto. Quando se trata de estudar delegates, é necessário conhecer a fundo o problema que há por detrás de sua solução.
Um pouco de história
No estudo de delegates, não é raro ouvir dizer que delegates não passam de "ponteiros de funções, algo bastante antigo, já utilizado em C++". Pois bem, delegates são ponteiros de funções. E o que isto significa exatamente? Uma rápida explicação sobre ponteiros merece ser feita neste momento.
Apesar de a linguagem C# restringir o uso de ponteiros, ainda é possível utilizá-los. Todavia, com a nova forma de manipulação de objetos, esta prática se tornou obsoleta em linguagens orientada a objetos. Em Java, por exemplo, essa funcionalidade nem sequer existe, pois os objetos trabalham com um sistema de referências de alocação em memória que torna tecnologicamente antiquado, desnecessário e complicado em relação a essa nova tecnologia. Ponteiros ainda são muito utilizados e são muito úteis, mas não são largamente aplicáveis para os tipos de software e desenvolvedor os quais C# e Java propuseram-se a prover.
Ponteiro é um tipo de dado que armazena o endereço de memória de outro tipo de dado. Em suma, quando um ponteiro é alocado na memória, ele está apenas referenciando outra variável que, de fato, contém o valor que será utilizado. Observe que a variável alpha da Figura 1 contém o valor 25 e que o ponteiro intPointer contém o endereço da variável alpha. Este é um mecanismo bastante útil para a troca de informações dentro de um sistema ou entre sistemas que se comunicam. Internamente, é assim que o sistema operacional, arrays e listas trabalham.
A fim de manter em memória não somente variáveis e objetos, as funções callback do C++ permitiram que métodos inteiros fossem armazenados. Portanto, deste modo, é possível realocar a função desejada completamente na memória RAM.
O que são delegates
Seguindo essa linha, a Microsoft implementou na plataforma .NET o conceito de delegate: um tipo de dado que representa a referência de um método. Ou seja, enquanto o tipo Int32 representa um número inteiro de 32 bits e o tipo String representa uma cadeia unida de caracteres, o tipo Delegate representa todo método passado a ele como referência.
De modo diferente de ponteiros de funções, delegates aceitam apenas métodos cuja assinatura seja igual à assinatura do delegate. Caso não seja, o desenvolvedor será avisado pelo compilador. Essa segurança provida pela plataforma permite ao compilador gerenciar os métodos que estão de acordo com o delegate e que não acessarão outras áreas de memória senão àquelas requeridas. Por esta razão delegates são considerados tipos-seguros gerenciados.
"
Este é um post disponível para assinantes MVPou para quem possui Créditos DevMedia. Clique aqui para saber mais!
Orlando Junior
Mestrando em Engenharia da Informação (Sistemas Inteligentes), é bacharel em Ciência da Computação e Engenheiro de Software.
3 COMENTÁRIOS
Inseri o codigo abaixo, porem ocorreram erros
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsDelegates
{
class Program
{
static void Main(string[] args)
{
}
public static string RemoveQuebraDeLinha(string mensagem)
{
return mensagem.Replace("\n", string.Empty);
}
public static string RemoveNumeros(string mensagem)
{
return Regex.Replace(mensagem, @ "[\d]", string.Empty);
}
}
}
return Regex.Replace(mensagem, @ "[\d]", string.Empty);
Error 1 Keyword, identifier, or string expected after verbatim specifier: @
Error 2 Unrecognized escape sequence
Error 3 Invalid expression term ''
Error 4 ) expected
Error 5 ; expected
Error 6 Invalid expression term ','
Error 7 ; expected
Error 8 ; expected
Error 9 Invalid expression term ')'
http://msdn.microsoft.com/pt-br/library/system.text.regularexpressions.regex.replace.aspx



