Select Case extern "erweitern"

  • VB.NET

Es gibt 33 Antworten in diesem Thema. Der letzte Beitrag () ist von ChOoSeMyNaMe.

    Select Case extern "erweitern"

    Gibt es die Möglichkeit, eine Select Case-Abfrage extern zu erweitern, also aus einer anderen Klasse/DLL weitere Fälle und Handlungen hinzuzufügen? So habe ich es mir vorgestellt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Select Case Console.ReadLine()
    2. Case "1"
    3. 'Handlung
    4. Case "2"
    5. 'Handlung
    6. Case "3"
    7. 'Handlung
    8. Import Erweiterung
    9. End Select
    Erweiterung:

    VB.NET-Quellcode

    1. Select Case x
    2. Case "4"
    3. 'Handlung
    4. Case "5"
    5. 'Handlung
    6. Case "6"
    7. 'Handlung
    8. End Select


    Habt ihr eine Idee, wie man dies machen könnte? Es soll über eine Art Pluginsystem laufen, sodass man es extern (z.B. mit .dll-Dateien) erweitern kann. Sonnst müsste ich alle Funktionen ins Hauptprogramm einbauen und darauf habe ich keine Lust, weil dies dann rasch unübersichtlich wird. Außerdem wären es dann die ersten Anläufe einer API.

    Danke schon mal im Vorraus! Grüße
    masterm
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21

    masterm schrieb:

    wie man dies machen könnte?
    So:

    VB.NET-Quellcode

    1. Dim value = Console.ReadLine()
    2. Select Case value
    3. Case "1"
    4. 'Handlung
    5. Case "2"
    6. 'Handlung
    7. Case "3"
    8. 'Handlung
    9. Case Else
    10. Erweiterung(value)
    11. End Select
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist ja nur eine Weitergabe an eine andere Sub ;( . OK, ich habe mich falsch ausgedrückt. Während der Laufzeit soll eine vom Benutzer ausgewählte DLL "eingebunden" werden und darauf soll zugegriffen werden.
    Aber trotzdem danke.
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Das ist schon richtig so.

    Wenn keines der Handlungen zutrifft, soll er zur Erweiterung gehen und schauen, ob es noch weitere Möglichkeiten gibt.
    Deine "Erweiterungs-Sub" musst du nur beim Case Else aufrufen.

    ~ Alex-Digital :D
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D
    Schreibe doch bitte zunächst eine vollständige Problembeschreibung / Aufgabenstellung, die einen solchen Satz erübrigt:

    masterm schrieb:

    ich habe mich falsch ausgedrückt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    TE schrieb:

    Gibt es die Möglichkeit, eine Select Case-Abfrage extern zu erweitern, also aus einer anderen Klasse/DLL weitere Fälle und Handlungen hinzuzufügen?


    ums kurz zu sagen: Nein.
    Einem Select Case kannste nicht zur Laufzeit nachträglich noch weitere Cases hinzufügen.

    Einem Dictionary kann man immer weitere KeyValue-Pairs hinzufügen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EDR-Temporär“ ()

    EDR-Temporär schrieb:

    Einem Select Case kannste nicht zur Laufzeit nachträglich noch weitere Cases hinzufügen.
    Wie lautet / wo steht die Frage zu dieser Antwort?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Ganz grob: Ich habe ein Programm, welches auf verschiedene Eingaben verschiedene Aktionen ausführen soll. Genauer gesagt soll es ein kleiner Interpreter werden. Dieser Interpreter soll um Befehle nachträglich erweitert werden, ohne ein komplettes Update installieren zu müssen.

    @Alex-Digital Ich dachte unter dem Framework 4 gibt es inzwischen etwas eigenes und ich wollte das Rad deshalb nicht neu erfinden.
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    @masterm Ein PlugIn-System. Nur kann es sein, dass Du mehrere DLLs nachlädtst und mehrere Codes abfragen musst.
    Da ist eine ganz andere Strategie erforderlich, die so aussehen kann:

    VB.NET-Quellcode

    1. For Each xx In yy
    2. ' was tun
    3. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    zum Thema PlugIn-System hast du doch einen Link bekommen - ist der nicht gut? Was anderes kann dir hier vmtl. auch nicht mitgeteilt werden zum Thema Plugin-System.

    Aber vlt. erzählste noch mehr vom Interpreter. Gelegentlich ists möglich, die Pluginnerei wegzulassen, und allein durch geeignete Daten die notwendige Flexiblität bereitstellen.
    Dann bräuchteste keine kompilierten Dlls nachzuladen, sondern nur paar Daten.
    Aber hängt davon ab, was der Interpreter tun soll.

    EDR-Temporär schrieb:

    Aber vlt. erzählste noch mehr vom Interpreter

    Ich entwickle eine kleine Skriptsprache. Genauer gesagt den Interpreter dazu. Die Befehlsliste soll durch Plugins, die am Anfang des Skriptes angegeben werden, erweitert werden. Zum Beispiel ein E-Mail-Plugin, womit man mit einem Skript auch E-Mails versenden kann.

    Zu dem Link: Ich verstehe das nicht ganz und ich verwende nur ungern Code per C&P, wenn ich ihn nicht verstehe. Außerdem ist meine Anwendung eine Konsolenanwendung und keine Forms-Anwendung.
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    hmm.
    Wenn du das Tut nicht verstehst, dann kannst du logisch auch kein Plugin-System erstellen.
    Ich kann mir auch kein PlugIn-Interface vorstellen, was alle Befehle, die dir scheinbar vorschweben, abdecken könnte. Aber diesen Einwand wirst du vmtl. ebensowenig verstehen wie das Tut insgesamt.
    (Und meinen Ansatz, die Geschichte über ein listiges Datenmodell abzuhandeln greift da erst recht zu kurz)

    masterm schrieb:

    Ich entwickle eine kleine Skriptsprache. Genauer gesagt den Interpreter dazu
    Wenn es dir an Erfahrung mangelt: Mach nicht den zweiten Schritt vor dem ersten.
    Bring erst mal den Interpreter zum Laufen.
    Das dürfte schon mal Herausforderung genug sein.
    Vielleicht verstehst du danach auch, was EdR mit dem listigen Datenmodell meinte.

    Wenn der Interpreter läuft und du immer noch meinst, ein Plugin-System zu benötigen, bau dir ein kleines, einfaches Plugin-System für "Hello World".

    Wenn du beides begriffen hast, ist es auch kein Problem mehr, die beiden Ansätze zu verheiraten.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod Ich denke, du hast recht. Ich tue mir damit zwar schwer, aber ich muss akzeptieren, dass das Pluginsystem noch nichts für mich ist. Ich werde die Befehle eher in einzelne Klassen aufteilen, damit es übersichtlicher wird. Wenn der Release kommt, kann ich diese Klassen ja immer noch als Plugin auslagern. Vielen Dank für eure Hilfe, auch wenn ich sie am Anfang nicht so ganz annehmen wollte :thumbup: !

    Und noch ganz schamlos Eigenwerbung ;) : Wer noch Informationen zu meinem Interpreter haben will, kann mir eine PN schicken. Ich suche noch ein oder zwei Betatester.
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21

    masterm schrieb:

    Außerdem ist meine Anwendung eine Konsolenanwendung
    Holzweg.
    Eine Konsoleanwendung ist konzipiert Start -> Abarbeitung des Codes -> Beendigung der Anwendung.
    Wenn Du damit interagieren willst, brauchst Du eine eigene Befehls-Queue.
    Wenn ich jetzt so sehe, was Du kannst bzw. was Du nicht kannst, kann ich Dir nur sagen:
    Lass die Konsole, nimm eine WinForms-Anwendung.
    Wen Du das nicht einsiehst, wirst Du hier wenig qualifizierte Hilfe bekommen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany Mehr als Code abarbeiten soll sie doch nicht. Man soll mit ihr gar nicht direkt interagieren. Die Anweisungen kommen aus einer Textdatei. Ich verstehe nicht, was jetzt an einer Konsolenanwendung so schlimm ist.
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21

    masterm schrieb:

    Die Anweisungen kommen aus einer Textdatei.
    Also so was wie (Pseudocode):

    Quellcode

    1. For Each zeile in TextDatei
    2. Call MakroAbarbeitung(zeile)
    3. Next
    4. Exit
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!