{"id":164,"date":"2023-12-10T18:37:51","date_gmt":"2023-12-10T21:37:51","guid":{"rendered":"https:\/\/dotnetdicas.com.br\/?p=164"},"modified":"2023-12-10T22:08:59","modified_gmt":"2023-12-11T01:08:59","slug":"delegates-em-c","status":"publish","type":"post","link":"https:\/\/dotnetdicas.com.br\/?p=164","title":{"rendered":"Delegates em C#"},"content":{"rendered":"<p><span style=\"font-family: verdana, geneva, sans-serif;\">Ol\u00e1, Devs! Quando se trata de programa\u00e7\u00e3o em C#, um dos conceitos mais poderosos, por\u00e9m frequentemente mal compreendido, \u00e9 o de &#8220;Delegates&#8221;. Delegate \u00e9 um tipo que representa uma maneira flex\u00edvel de passar m\u00e9todos como par\u00e2metros e tipo de retorno espec\u00edficos, ou seja, quando voc\u00ea instancia um delegate, voc\u00ea pode associar sua inst\u00e2ncia a qualquer m\u00e9todo com uma assinatura compat\u00edvel e tipo de retorno. Voc\u00ea pode invocar (ou chamar) o m\u00e9todo atrav\u00e9s da inst\u00e2ncia do delegate. Neste artigo, vamos mergulhar no mundo dos <strong>Delegates em C#<\/strong>, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em cen\u00e1rios reais de programa\u00e7\u00e3o.<\/span><\/p>\n<h3><span style=\"font-family: verdana, geneva, sans-serif;\">1. Delegates em C#<\/span><\/h3>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Delegates implementam t\u00e9cnicas de programa\u00e7\u00e3o como callbacks, eventos e LINQ, atuando como tipos de refer\u00eancia que encapsulam um m\u00e9todo ou grupo de m\u00e9todos (no caso de multicast delegates). Al\u00e9m disso, eles se assemelham aos ponteiros de fun\u00e7\u00e3o de outras linguagens de programa\u00e7\u00e3o, mas, diferentemente destes, oferecem seguran\u00e7a de tipo e s\u00e3o orientados a objeto. Para definir um delegate em C#, utiliza-se a palavra-chave &#8216;delegate&#8217;. Sua principal utilidade, portanto, reside na capacidade de passar m\u00e9todos como par\u00e2metros, proporcionando assim flexibilidade e reutiliza\u00e7\u00e3o de c\u00f3digo.<\/span><\/p>\n<h3><span style=\"font-family: verdana, geneva, sans-serif;\">2. Declara\u00e7\u00e3o e uso<\/span><\/h3>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Veja abaixo um exemplo simples de como um delegate \u00e9 declarado e usado:<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-168\" src=\"http:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate1-1024x445-1-300x130.png\" alt=\"Delegate - declara\u00e7\u00e3o e uso\" width=\"741\" height=\"321\" srcset=\"https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate1-1024x445-1-300x130.png 300w, https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate1-1024x445-1-768x334.png 768w, https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate1-1024x445-1.png 1024w\" sizes=\"(max-width: 741px) 100vw, 741px\" \/><\/p>\n<h3><span style=\"font-family: verdana, geneva, sans-serif;\">3. Como funcionam?<\/span><\/h3>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Para entender melhor, vamos ver outro exemplo. Suponha que voc\u00ea tenha um m\u00e9todo que processa mensagens de texto de diferentes maneiras. Sem um delegate, voc\u00ea teria que escrever v\u00e1rios m\u00e9todos ou implementar v\u00e1rias verifica\u00e7\u00f5es para cada tipo de processamento. Com delegates, voc\u00ea pode criar um \u00fanico m\u00e9todo que aceita um delegate como par\u00e2metro e, ent\u00e3o, passar diferentes m\u00e9todos de processamento para ele.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-169\" src=\"http:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate2-1024x300-1-300x88.png\" alt=\"Delegates em C#\" width=\"737\" height=\"216\" srcset=\"https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate2-1024x300-1-300x88.png 300w, https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate2-1024x300-1-768x225.png 768w, https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate2-1024x300-1.png 1024w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/p>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Neste exemplo, ProcessMessage \u00e9 um delegate que aceita uma string e retorna void. O m\u00e9todo DisplayMessage aceita um delegate ProcessMessage e o invoca.<\/span><\/p>\n<h3><span style=\"font-family: verdana, geneva, sans-serif;\">4. Multicast Delegates: ampliando as possibilidades<\/span><\/h3>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Um aspecto interessante dos delegates em C# \u00e9 que eles t\u00eam a capacidade de &#8220;multicast&#8221;, permitindo que um \u00fanico delegate referencie m\u00faltiplos m\u00e9todos. Al\u00e9m disso, a invoca\u00e7\u00e3o do delegate chama todos os m\u00e9todos referenciados em sequ\u00eancia. Essa caracter\u00edstica se mostra particularmente \u00fatil, especialmente em situa\u00e7\u00f5es de notifica\u00e7\u00e3o ou eventos, nas quais \u00e9 necess\u00e1rio desencadear m\u00faltiplas a\u00e7\u00f5es a partir de um \u00fanico evento.<\/span><\/p>\n<p><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter wp-image-170\" src=\"http:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate3-1024x650-1-300x190.png\" alt=\"Delegates em C# - Multicast\" width=\"745\" height=\"472\" srcset=\"https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate3-1024x650-1-300x190.png 300w, https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate3-1024x650-1-768x488.png 768w, https:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate3-1024x650-1.png 1024w\" sizes=\"(max-width: 745px) 100vw, 745px\" \/><\/p>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Neste exemplo, myDelegate \u00e9 um <em><strong>delegate multicast<\/strong><\/em> que chama <em>ShowMessage<\/em> e <em>LogMessage<\/em> em sequ\u00eancia.<\/span><\/p>\n<h3><span style=\"font-family: verdana, geneva, sans-serif;\">5. Conclus\u00e3o<\/span><\/h3>\n<p><span style=\"font-family: verdana, geneva, sans-serif;\">Em suma, os Delegates em C# s\u00e3o ferramentas extremamente vers\u00e1teis e poderosas. Eles permitem que programadores escrevam c\u00f3digos mais limpos, eficientes e reutiliz\u00e1veis. Portanto, seja voc\u00ea um iniciante ou um profissional experiente, entender e saber como utilizar Delegates certamente enriquecer\u00e1 suas habilidades de programa\u00e7\u00e3o em C#.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ol\u00e1, Devs! Quando se trata de programa\u00e7\u00e3o em C#, um dos conceitos mais poderosos, por\u00e9m frequentemente mal compreendido, \u00e9 o de &#8220;Delegates&#8221;. Delegate \u00e9 um tipo que representa uma maneira flex\u00edvel de passar m\u00e9todos como par\u00e2metros e tipo de retorno espec\u00edficos, ou seja, quando voc\u00ea instancia um delegate, voc\u00ea pode associar sua inst\u00e2ncia a qualquer [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Delegates em C# - DotNetDicas - C\u00f3digo forte, Carreira mais forte<\/title>\n<meta name=\"description\" content=\"Neste artigo, vamos mergulhar no mundo dos Delegates em C#, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/dotnetdicas.com.br\/?p=164\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Delegates em C# - DotNetDicas - C\u00f3digo forte, Carreira mais forte\" \/>\n<meta property=\"og:description\" content=\"Neste artigo, vamos mergulhar no mundo dos Delegates em C#, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/dotnetdicas.com.br\/?p=164\" \/>\n<meta property=\"og:site_name\" content=\"DotNetDicas - C\u00f3digo forte, Carreira mais forte\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-10T21:37:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-11T01:08:59+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate1-1024x445-1-300x130.png\" \/>\n<meta name=\"author\" content=\"deluthyo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"deluthyo\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/dotnetdicas.com.br\/?p=164\",\"url\":\"https:\/\/dotnetdicas.com.br\/?p=164\",\"name\":\"Delegates em C# - DotNetDicas - C\u00f3digo forte, Carreira mais forte\",\"isPartOf\":{\"@id\":\"https:\/\/dotnetdicas.com.br\/#website\"},\"datePublished\":\"2023-12-10T21:37:51+00:00\",\"dateModified\":\"2023-12-11T01:08:59+00:00\",\"author\":{\"@id\":\"https:\/\/dotnetdicas.com.br\/#\/schema\/person\/fe2e612193c5e02e43e77612919ed740\"},\"description\":\"Neste artigo, vamos mergulhar no mundo dos Delegates em C#, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em...\",\"breadcrumb\":{\"@id\":\"https:\/\/dotnetdicas.com.br\/?p=164#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/dotnetdicas.com.br\/?p=164\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/dotnetdicas.com.br\/?p=164#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/dotnetdicas.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Delegates em C#\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/dotnetdicas.com.br\/#website\",\"url\":\"https:\/\/dotnetdicas.com.br\/\",\"name\":\"DotNetDicas - C\u00f3digo forte, Carreira mais forte\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/dotnetdicas.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/dotnetdicas.com.br\/#\/schema\/person\/fe2e612193c5e02e43e77612919ed740\",\"name\":\"deluthyo\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/dotnetdicas.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9806a9423af8d8b7fef2033b874dfd26?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9806a9423af8d8b7fef2033b874dfd26?s=96&d=mm&r=g\",\"caption\":\"deluthyo\"},\"sameAs\":[\"http:\/\/dotnetdicas.com.br\"],\"url\":\"https:\/\/dotnetdicas.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Delegates em C# - DotNetDicas - C\u00f3digo forte, Carreira mais forte","description":"Neste artigo, vamos mergulhar no mundo dos Delegates em C#, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/dotnetdicas.com.br\/?p=164","og_locale":"pt_BR","og_type":"article","og_title":"Delegates em C# - DotNetDicas - C\u00f3digo forte, Carreira mais forte","og_description":"Neste artigo, vamos mergulhar no mundo dos Delegates em C#, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em...","og_url":"https:\/\/dotnetdicas.com.br\/?p=164","og_site_name":"DotNetDicas - C\u00f3digo forte, Carreira mais forte","article_published_time":"2023-12-10T21:37:51+00:00","article_modified_time":"2023-12-11T01:08:59+00:00","og_image":[{"url":"http:\/\/dotnetdicas.com.br\/wp-content\/uploads\/2023\/12\/delegate1-1024x445-1-300x130.png"}],"author":"deluthyo","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"deluthyo","Est. tempo de leitura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/dotnetdicas.com.br\/?p=164","url":"https:\/\/dotnetdicas.com.br\/?p=164","name":"Delegates em C# - DotNetDicas - C\u00f3digo forte, Carreira mais forte","isPartOf":{"@id":"https:\/\/dotnetdicas.com.br\/#website"},"datePublished":"2023-12-10T21:37:51+00:00","dateModified":"2023-12-11T01:08:59+00:00","author":{"@id":"https:\/\/dotnetdicas.com.br\/#\/schema\/person\/fe2e612193c5e02e43e77612919ed740"},"description":"Neste artigo, vamos mergulhar no mundo dos Delegates em C#, desvendando seu funcionamento, utilidade e como eles podem ser aplicados em...","breadcrumb":{"@id":"https:\/\/dotnetdicas.com.br\/?p=164#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/dotnetdicas.com.br\/?p=164"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/dotnetdicas.com.br\/?p=164#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/dotnetdicas.com.br\/"},{"@type":"ListItem","position":2,"name":"Delegates em C#"}]},{"@type":"WebSite","@id":"https:\/\/dotnetdicas.com.br\/#website","url":"https:\/\/dotnetdicas.com.br\/","name":"DotNetDicas - C\u00f3digo forte, Carreira mais forte","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/dotnetdicas.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/dotnetdicas.com.br\/#\/schema\/person\/fe2e612193c5e02e43e77612919ed740","name":"deluthyo","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/dotnetdicas.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9806a9423af8d8b7fef2033b874dfd26?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9806a9423af8d8b7fef2033b874dfd26?s=96&d=mm&r=g","caption":"deluthyo"},"sameAs":["http:\/\/dotnetdicas.com.br"],"url":"https:\/\/dotnetdicas.com.br\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=\/wp\/v2\/posts\/164"}],"collection":[{"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=164"}],"version-history":[{"count":10,"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=\/wp\/v2\/posts\/164\/revisions"}],"predecessor-version":[{"id":177,"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=\/wp\/v2\/posts\/164\/revisions\/177"}],"wp:attachment":[{"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dotnetdicas.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}