{"id":55000022,"date":"2016-02-01T00:00:00","date_gmt":"2020-03-27T19:17:17","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=22"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Delegates","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Delegates\/","title":{"rendered":"Delegates"},"content":{"rendered":"<p><b>Delegates sind Typen, denen Sie eine Methode zuweisen, die sie dann &uuml;ber das Delegate ausf&uuml;hren k&ouml;nnen. Ein Delegate legt dabei nur fest, welchen R&uuml;ckgabewert und welche Parameter die zu verwendende Methode nutzt &#8211; Sie k&ouml;nnen dem Delegate zur Laufzeit dann beliebige Methoden zuweisen, die dieser Signatur entsprechen. Delegates ben&ouml;tigen Sie aber auch, wenn Sie Klassen mit benutzerdefinierten Ereignissen programmieren m&ouml;chten. In diesem Fall nutzen Sie ein Delegate, um die beim Eintreten des Ereignisses auszuf&uuml;hrende Methode festzulegen.<\/b><\/p>\n<p>In diesem Artikel schauen wir uns zun&auml;chst an, wie ein Delegate funktioniert, und erl&auml;utern erst im Anschluss, welchen Nutzen dies hat. Angenommen, Sie haben zwei Methoden, welche die gleichen Parameter nutzen, aber verschiedene Dinge erledigen. Ein sch&ouml;nes Beispiel ist dabei das Addieren und das Multiplizieren zweier Zahlen. Die beiden Methoden w&uuml;rden dann etwa wie folgt aussehen:<\/p>\n<pre>public static int Summe(int a, int b) {\r\n     return a + b;\r\n}\r\npublic static int Produkt(int a, int b) {\r\n     return a * b;\r\n}<\/pre>\n<p>Wollen Sie nun eine dieser Methoden aufrufen, w&uuml;rden Sie dies beispielsweise wie folgt erledigen:<\/p>\n<pre>Console.WriteLine(\"Summe aus 2 und 3: {0}, Summe(2, 3));<\/pre>\n<p>Zum Multiplizieren rufen Sie einfach die Methode <b>Produkt <\/b>auf:<\/p>\n<pre>Console.WriteLine(\"Produkt aus 2 und 3: {0}, Produkt(2, 3));<\/pre>\n<p>Wenn Sie beim Erstellen des Projekts noch nicht wissen, welche der Methoden an einer bestimmten Stelle zum Einsatz kommen wird, fragen Sie beispielsweise den Benutzer danach und codieren die Aufrufe dann direkt in die Bedingung:<\/p>\n<pre>public static void Test_SummeOderProdukt() {\r\n     Console.WriteLine(\"M&ouml;chten Sie multiplizieren (*) \r\n         oder addieren (+)\");\r\n     string operation = Console.ReadLine();\r\n     if (operation == \"*\") {\r\n         Console.WriteLine(\"Produkt aus 2 und 3: {0}\", \r\n             Produkt(2, 3));\r\n     }\r\n     else {\r\n         Console.WriteLine(\"Summe aus 2 und 3: {0}\", \r\n             Summe(2, 3));\r\n     }\r\n     Console.ReadLine();\r\n}<\/pre>\n<h2>Aufruf per Delegate<\/h2>\n<p>Diese beiden Methoden wollen wir nun &uuml;ber eine einzige Methode aufrufen, wobei wir dieser Methode zuvor den Namen der zu verwendenden Methode (also <b>Summe <\/b>oder <b>Produkt<\/b>) &uuml;bergeben, damit diese wei&szlig;, welche Methode sie nutzen soll. Diese gemeinsame Methode hei&szlig;t dann allerdings nicht mehr Methode, sondern Delegate, und es ist auch keine Methode mehr, sondern ein Objekt. Dieses deklarieren wir wie folgt:<\/p>\n<pre>public delegate int Berechnung(int a, int b);<\/pre>\n<p>Die Unterschiede zu einer herk&ouml;mmlichen Methode sind offensichtlich: Erstens verwenden wir bei der Deklaration das Schl&uuml;sselwort <b>delegate<\/b>. Zweitens hat dieses Delegate im Gegensatz zu einer Methode nur eine Deklaration, aber keinen in geschweiften Klammern befindlichen Programmcode. Nun wollen wir &uuml;ber das Delegate <b>Berechnung <\/b>zun&auml;chst die Funktion <b>Summe <\/b>aufrufen. Dazu erstellen wir ein neues Objekt auf Basis des Delegates <b>Berechnung<\/b>. Dabei &uuml;bergeben wir dem Konstruktor den Namen der Methode, die wir verwenden wollen. Und statt der Methode <b>Summe() <\/b>rufen wir nun das Delegate-Objekt <b>berechnung<\/b> unter Angabe der zu addierenden Zahlen auf:<\/p>\n<pre>public static void Test_Delegat_Summe() {\r\n     Berechnung berechnung = new Berechnung(Summe);\r\n     Console.WriteLine(\"Summe aus 2 und 3 per Delegat: \r\n         {0}\", berechnung(2, 3));\r\n     Console.ReadLine();\r\n}<\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000;\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000;\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000;\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000;\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000022\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000022?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000022\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"123b777de9\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Delegates sind Typen, denen Sie eine Methode zuweisen, die sie dann &uuml;ber das Delegate ausf&uuml;hren k&ouml;nnen. Ein Delegate legt dabei nur fest, welchen R&uuml;ckgabewert und welche Parameter die zu verwendende Methode nutzt &#8211; Sie k&ouml;nnen dem Delegate zur Laufzeit dann beliebige Methoden zuweisen, die dieser Signatur entsprechen. Delegates ben&ouml;tigen Sie aber auch, wenn Sie Klassen mit benutzerdefinierten Ereignissen programmieren m&ouml;chten. In diesem Fall nutzen Sie ein Delegate, um die beim Eintreten des Ereignisses auszuf&uuml;hrende Methode festzulegen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012016,662016,44000009],"tags":[],"yst_prominent_words":[],"class_list":["post-55000022","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-CProgrammiertechnik"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000022"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000022\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000022"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}