2016-09-21 1 views
0

Ich habe eine Konsolenanwendung, die zum Importieren von Zeug aus einer WS verwendet wird.C#: Eine Methode aus der Konsolenanwendung aufrufen

Ich bin wirklich neu in Console Apps, also habe ich eine Frage.

Das Projekt enthält eine Klasse namens Importeur.cs. Diese Klasse hat eine Methode namens Initialisieren():

class Importer 
{ 
    static void Initialize() 
    { 
     //here i connect to the server etc. 
    } 
} 

Jetzt habe ich meine APP in der Lage sein wollen, wie zu nennen:

Importer.exe Initialize 

So sollte es die Initialize-Methode aufrufen, und dann würde Ich mag an in der Lage zu gehen mit zum Beispiel:

Importer.exe StartImport 

ich arbeite bereits mit dem args [] Parametern, aber ich bin jetzt ganz fest.

+0

Sie können das nicht tun, aber versuchen Sie, Klassenbibliothek Projekt zu verwenden und seine Ausgabe 'dll' zu Referenzen hinzufügen –

+0

Sie müssen lernen, wie Sie Reflection verwenden, so dass Sie eine Zeichenfolge wie" Initialize "in ein MethodInfo-Objekt übersetzen können .Es ist sehr unwahrscheinlich, dass es eine nützliche Übung ist, außer zu wissen, wie man Reflection benutzt, nachdem Sie fertig sind. –

Antwort

1

Verwenden Sie eine Bibliothek wie CommandLineParser, und verwenden Sie dann Reflection, um diese Methode als MethodInfo-Objekte aufzurufen.

+0

Ich werde das versuchen. sieht interessant aus –

0

Suchen Sie in Ihrer Konsolenanwendung in Ihrem Lösungs-Explorer (im rechten Fenster von VS, in dem alle Ihre Dateien angezeigt werden). Finde den einen PROGRAMM.CS. Öffnen Sie es und sucht diese:

static void Main(string[] args) 
    { 

    } 

Innerhalb dass setzen diese:

static void Main(string[] args) 
    { 
     //This starts a new instance of the Importer Class 
     Importer myImporter = new Importer(); 
     //This calls the Initialize Method within Importer 
     Importer.Initialize(); 
     //This calls the StartInput() Method within Importer 
     Importer.StartInput();  
     //Use Console.ReadLine() as the last line in this method to keep your screen open after program execution ends. 
     Console.ReadLine();  
    } 

Das erste, was die Konsole App läuft ins Main() in Konsolenanwendung.

Dann testen Sie einfach das Projekt mit F5. Erstellen Sie nach dem Testen das Projekt, und führen Sie einen Doppelklick auf die EXE-Datei aus.

0

Je nachdem, was Sie gerade tun, wird dies möglicherweise nicht einmal funktionieren. Ich stelle mir eine Situation vor, wo du Initialize() und danach StartImport() hast, aber zwischen diesen 2 Aufrufen wurde das Programm beendet und der initialisierte Zustand ist weg. Wenn Sie keine Methoden wie Initialize(), sondern atomare Unterbefehle haben, ist Ihre Vorgehensweise prinzipiell möglich.

Aber es gibt eine Frage: Wird das generisch sein? Ich meine: Sag, du fügst eine andere Methode hinzu. Möchten Sie dann den Zugriff auf die Methode durch einen Unterbefehl automatisch herstellen lassen oder möchten Sie einen weiteren Unterbefehl hinzufügen? Die erste Option würde bedeuten, dass Sie sich mit Reflection vertraut machen müssen.

Nun, sagen Sie, Sie fügen Methoden hinzu, die Sie aus welchem ​​Grund auch immer nicht als privat deklarieren können, aber Sie wollen nicht, dass sie als Unterbefehl verfügbar gemacht werden. Sie müssten also die Sichtbarkeit im Auge behalten. Sicher, das würde schlechtes Design bedeuten, aber wenn Sie mit Legacy-Komponenten stecken, könnte dies passieren.

Nehmen wir jetzt an, Sie benötigen die Initialize() (oder ähnliche) Befehl (e). Sie kümmern sich um einen Verbindungsstatus oder was auch immer und das Programm muss immer noch ausgeführt werden, wenn der nächste Unterbefehl aufgerufen wird, damit er die initialisierten Informationen, Handles usw. verwenden kann. Wäre es dann nicht sinnvoller, Ihre Konsolenanwendung zu entwerfen wie eine Muschel? Sie würden also mit beginnen und nach Unterbefehlen gefragt werden.

+1

Ich bin mir ziemlich sicher, dass der Typ nur wissen möchte, wie man seine Klassenmethoden in einer Konsolen-App-Umgebung ausführt. Er denkt, er muss sie als Befehlszeilenargumente übergeben –

+0

Sicher, aber ich denke, er hat diesen Punkt, dass dies nicht trivial ist und der eigentliche Punkt meiner Antwort ist, dass ein solcher Befehl nach dem Befehl Design für was er nicht funktionieren könnte versucht es zu tun. –

+0

Amen dazu! Prost! –

Verwandte Themen