DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Easy .net magazine
ou 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.





Easy .net magazine 6

[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.

"

A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Easy .net magazine
ou 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.
O que você achou deste post?

    3 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Rodrigo Ferreira De Assis
Boa tarde;

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);
}
}
}
[há +1 ano] - Responder

 

Rodrigo Ferreira De Assis
Os erros reportados estam relacionados ao segundo metodo.

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 ')'
[há +1 ano] - Responder

 

Luiz Agnelo C. Maia
Da uma olhada aqui:

http://msdn.microsoft.com/pt-br/library/system.text.regularexpressions.regex.replace.aspx

[há +1 ano] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03