Methodenstarter als Vorlage

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

In Ausgabe 2/2015 haben wir unter dem Titel “Experimentieren mit der Konsole” eine Technik vorgestellt, mit der Sie die Methoden einer Klasse direkt in der Konsole auflisten und dort zur Ausführung auswählen können. Der Nachteil war, dass Sie damit nur eine Klasse mit fest vorgegebenem Klassennamen referenzieren konnten. Dies haben wir nun erweitert: mit einer neuen “Main”-Methode, die beim Start der Anwendung aufgerufen wird und alle Methoden aller Klassen außer der Klasse “Program” selbst auflistet und so ermöglicht, diese zu starten.

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 über einfache C#-Methoden noch einfacher als zuvor.

Alles, was Sie tun müssen, ist das Erstellen eines neuen Projekts als Konsolen-Projekt, dessen Datei Program.cs Sie mit dem Code aus Listing 1 füllen.

using System;
using System.Reflection;
using System.Collections;
namespace Methodenstarter {
     class Program {
         static void Main(string[] args) {
             int j = 0; int i = 1; int intType = 1;
             string strMethode = ""; string strBeschreibung = "";
             ArrayList Methoden = new ArrayList(); ArrayList Typen = new ArrayList();
             Type[] types; Type currentType = null;
             do {
                 i = 1;
                 Assembly assembly = Assembly.GetEntryAssembly();
                 Console.WriteLine("Assembly: {0}", assembly.FullName);
                 types = FindAllExportedTypesInNamespaceFor(assembly);
                 Array.ForEach(types, delegate (Type type) {
                     if ((type.Name!="Program") & (type.Name!="Beschreibung")) {
                         intType = ++intType;
                         currentType = type;
                         Console.WriteLine("  Type: {0}", type.FullName);
                         Beschreibung beschreibung = (Beschreibung)type.GetCustomAttribute(typeof(Beschreibung));
                         if (beschreibung != null) { strBeschreibung = " - " + beschreibung.Text; }
                         else { strBeschreibung = ""; }
                         Console.WriteLine("    Klasse: {0}{1}", type.Name, strBeschreibung);
                         MethodInfo[] myArrayMethodInfo = type.GetMethods(BindingFlags.Public | BindingFlags.Static | 
                             BindingFlags.Instance | BindingFlags.DeclaredOnly);
                         strMethode = "";
                         foreach (MethodInfo methodInfo in myArrayMethodInfo) {
                             beschreibung = (Beschreibung)methodInfo.GetCustomAttribute(typeof(Beschreibung));
                             if (beschreibung != null) { strBeschreibung = " - " + beschreibung.Text; }
                             else { strBeschreibung = ""; }
                             strMethode = methodInfo.Name;
                             Console.WriteLine("      [{0,3}] {1} {2}", i++, strMethode, strBeschreibung);
                             Methoden.Add(strMethode);
                             Typen.Add(type);
                         }
                     }
                 });
                 String strMethodeNummer = Console.ReadLine();
                 if (int.TryParse(strMethodeNummer, out j)) {
                     if (j < i & j > 0) {
                         Console.WriteLine("Ausführen: {0}", j);
                         strMethode = (String)Methoden[j - 1];
                         currentType = (Type)Typen[j - 1];
                         currentType.InvokeMember(strMethode, BindingFlags.InvokeMethod, null, currentType, null);
                     }
                 }
                 else {
                     j = 0;
                 }
             } while (j > 0);
         }

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Visual Basic Entwickler:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar