{"id":55000026,"date":"2016-02-01T00:00:00","date_gmt":"2020-03-27T19:17:45","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=26"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Methodenstarter_als_Vorlage","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/Methodenstarter_als_Vorlage\/","title":{"rendered":"Methodenstarter als Vorlage"},"content":{"rendered":"<p><b>In Ausgabe 2\/2015 haben wir unter dem Titel &#8220;Experimentieren mit der Konsole&#8221; eine Technik vorgestellt, mit der Sie die Methoden einer Klasse direkt in der Konsole auflisten und dort zur Ausf&uuml;hrung ausw&auml;hlen k&ouml;nnen. Der Nachteil war, dass Sie damit nur eine Klasse mit fest vorgegebenem Klassennamen referenzieren konnten. Dies haben wir nun erweitert: mit einer neuen &#8220;Main&#8221;-Methode, die beim Start der Anwendung aufgerufen wird und alle Methoden aller Klassen au&szlig;er der Klasse &#8220;Program&#8221; selbst auflistet und so erm&ouml;glicht, diese zu starten.<\/b><\/p>\n<p>Im vorliegenden Beitrag nun stellen wir Ihnen eine neue Version der Technik aus Experimentieren mit der Konsole vor,  mit der Sie die zu testenden Methoden bequem in anderen Klassen anlegen, die sich optimalerweise auch noch in einer anderen Datei befinden. Damit wird das Ausprobieren von Code &uuml;ber einfache C#-Methoden noch einfacher als zuvor.<\/p>\n<p>Alles, was Sie tun m&uuml;ssen, ist das Erstellen eines neuen Projekts als Konsolen-Projekt, dessen Datei <b>Program.cs <\/b>Sie mit dem Code aus Listing 1 f&uuml;llen.<\/p>\n<pre>using System;\r\nusing System.Reflection;\r\nusing System.Collections;\r\nnamespace Methodenstarter {\r\n     class Program {\r\n         static void Main(string[] args) {\r\n             int j = 0; int i = 1; int intType = 1;\r\n             string strMethode = \"\"; string strBeschreibung = \"\";\r\n             ArrayList Methoden = new ArrayList(); ArrayList Typen = new ArrayList();\r\n             Type[] types; Type currentType = null;\r\n             do {\r\n                 i = 1;\r\n                 Assembly assembly = Assembly.GetEntryAssembly();\r\n                 Console.WriteLine(\"Assembly: {0}\", assembly.FullName);\r\n                 types = FindAllExportedTypesInNamespaceFor(assembly);\r\n                 Array.ForEach(types, delegate (Type type) {\r\n                     if ((type.Name!=\"Program\") & (type.Name!=\"Beschreibung\")) {\r\n                         intType = ++intType;\r\n                         currentType = type;\r\n                         Console.WriteLine(\"  Type: {0}\", type.FullName);\r\n                         Beschreibung beschreibung = (Beschreibung)type.GetCustomAttribute(typeof(Beschreibung));\r\n                         if (beschreibung != null) { strBeschreibung = \" - \" + beschreibung.Text; }\r\n                         else { strBeschreibung = \"\"; }\r\n                         Console.WriteLine(\"    Klasse: {0}{1}\", type.Name, strBeschreibung);\r\n                         MethodInfo[] myArrayMethodInfo = type.GetMethods(BindingFlags.Public | BindingFlags.Static | \r\n                             BindingFlags.Instance | BindingFlags.DeclaredOnly);\r\n                         strMethode = \"\";\r\n                         foreach (MethodInfo methodInfo in myArrayMethodInfo) {\r\n                             beschreibung = (Beschreibung)methodInfo.GetCustomAttribute(typeof(Beschreibung));\r\n                             if (beschreibung != null) { strBeschreibung = \" - \" + beschreibung.Text; }\r\n                             else { strBeschreibung = \"\"; }\r\n                             strMethode = methodInfo.Name;\r\n                             Console.WriteLine(\"      [{0,3}] {1} {2}\", i++, strMethode, strBeschreibung);\r\n                             Methoden.Add(strMethode);\r\n                             Typen.Add(type);\r\n                         }\r\n                     }\r\n                 });\r\n                 String strMethodeNummer = Console.ReadLine();\r\n                 if (int.TryParse(strMethodeNummer, out j)) {\r\n                     if (j &lt; i & j &gt; 0) {\r\n                         Console.WriteLine(\"Ausf&uuml;hren: {0}\", j);\r\n                         strMethode = (String)Methoden[j - 1];\r\n                         currentType = (Type)Typen[j - 1];\r\n                         currentType.InvokeMember(strMethode, BindingFlags.InvokeMethod, null, currentType, null);\r\n                     }\r\n                 }\r\n                 else {\r\n                     j = 0;\r\n                 }\r\n             } while (j &gt; 0);\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\/55000026\/\">\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\/55000026?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\/55000026\/\"\/>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"22c77db969\"\/>\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>In Ausgabe 2\/2015 haben wir unter dem Titel &#8220;Experimentieren mit der Konsole&#8221; eine Technik vorgestellt, mit der Sie die Methoden einer Klasse direkt in der Konsole auflisten und dort zur Ausf&uuml;hrung ausw&auml;hlen k&ouml;nnen. Der Nachteil war, dass Sie damit nur eine Klasse mit fest vorgegebenem Klassennamen referenzieren konnten. Dies haben wir nun erweitert: mit einer neuen &#8220;Main&#8221;-Methode, die beim Start der Anwendung aufgerufen wird und alle Methoden aller Klassen au&szlig;er der Klasse &#8220;Program&#8221; selbst auflistet und so erm&ouml;glicht, diese zu starten.<\/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,44000034,44000005,44000032],"tags":[],"yst_prominent_words":[66062023,66062057,66062059,66062062,66062061],"class_list":["post-55000026","post","type-post","status-publish","format-standard","hentry","category-66012016","category-662016","category-COMAddIns_programmieren","category-Tipps_und_Tricks","category-VBNETProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000026","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=55000026"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000026\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000026"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}