Aufruf von Funktionen abhängig von Variablen ?!

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Aufruf von Funktionen abhängig von Variablen ?!

    VB.NET-Quellcode

    Hallo,
    ich möchte einen flexiblen Aufruf einer Funktion z.B. abhängig von einer Variable, ist so etwas möglich?
    Der gezeigte Code ist zwar Blödsinn, verdeutlicht aber schön was ich möchte:

    Quellcode

    1. Sub Aufruf()
    2. Dim Var As String = "A oder B"
    3. Funktion_ & Var & ()
    4. End Sub
    5. Sub Funktion_A()
    6. MsgBox("Funktion A")
    7. End Sub
    8. Sub Funktion_B()
    9. MsgBox("Funktion B")
    10. End Sub


    Gruß
    Ist grundsätzlich möglich, aber nicht sinnvoll, denn man sollte sich immer die Möglichkeit offen halten, Dinge wie Variablen und Funktionen sehr schnell umbenennen zu können. Und das wird mit Deinem Konstrukt verkompliziert. Welches konkrete Problem soll gelöst werden? Wenn Du es präzise genug formulieren kannst, können wir eine Lösung finden, die das o.g. Konstrukt überflüssig macht.
    Wodurch soll programmlogisch festgelegt werden, welchen Wert Var hat? Wie soll der Programmablauf aussehen, der zur Lösung des bisher unbekannten Problems beiträgt?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Ich_bastel_in_VB Verstehe ich Dich richtig?
    Du versuchst, den Namen einer Funktion als String zusammenzusetzen und dann diese Funktion aufzurufen?
    Das geht nicht, .NET ist ein Compiler.
    Du kannst aber eine Variable mit einem Select Case Konstrukt abfragen und da eine Verzweigung machen:

    VB.NET-Quellcode

    1. Select Case MyVar
    2. Case "A": DoAnyFromA()
    3. Case "B": DoAnyFromB()
    4. End Select
    docs.microsoft.com/de-de/dotne…nts/select-case-statement
    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!
    Vielen Dank für die bisherigen Antworten,
    das bedeutet, ich müsste jeder meiner Funktionen so etwas vorschalten?

    Quellcode

    1. Function ErstellePunkt(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As Boolean
    2. Dim CAD_Umgebung As String = My.Settings.Umgebung
    3. Select Case CAD_Umgebung
    4. Case "ProE" : Return ProE_ErstellePunkt(X, Y, Z)
    5. Case "Catia" : Return Catia_ErstellePunkt(X, Y, Z)
    6. Case "NX" : Return NX_ErstellePunkt(X, Y, Z)
    7. End Select
    8. Return False
    9. End Function
    @Ich_bastel_in_VB Wenn es tatsächlich "nur" darum geht, Dein CAD-Programm in dieser Art zu unterstützen, ist es effektiver, Du erstellst von einer gemeinsamen Basisklasse abgeleitete Klassen, die die spezielle Implementierung der CAD-Umgebung enthalten.
    Dann musst Du zu Beginn genau ein Mal Deine Umgebung abfragen, Du erstellst die Instanzen Deiner Klassen und dann feddich.
    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 Ich habe nun mal eine Basisklasse erstellt und von dieser für jedes der drei CAD-Systeme eine Klasse abgeleitet. Wie erzeuge ich nun abhängig von der Variable "CAD_Umgebung" die passende Instanz?

    Quellcode

    1. Public Class Class1
    2. Dim CAD_Umgebung As String = My.Settings.Umgebung
    3. Public Sub Sart()
    4. '....
    5. End Sub
    6. End Class
    7. Public MustInherit Class CADFunktionenBasis
    8. Public MustOverride Function ErstellePunkt(ByVal X As Double, ByVal Y As Double, ByVal Z As Double) As String
    9. End Class
    10. Public Class ProE_CADFunktionen
    11. Inherits CADFunktionenBasis
    12. Public Overrides Function ErstellePunkt(X As Double, Y As Double, Z As Double) As String
    13. '##### Code Blabla
    14. Return "Funktion ProE fertig"
    15. End Function
    16. End Class
    17. Public Class Catia_CADFunktionen
    18. Inherits CADFunktionenBasis
    19. Public Overrides Function ErstellePunkt(X As Double, Y As Double, Z As Double) As String
    20. '##### Code Blabla
    21. Return "Funktion Catia fertig"
    22. End Function
    23. End Class
    24. Public Class NX_CADFunktionen
    25. Inherits CADFunktionenBasis
    26. Public Overrides Function ErstellePunkt(X As Double, Y As Double, Z As Double) As String
    27. '##### Code Blabla
    28. Return "Funktion NX fertig"
    29. End Function
    30. End Class

    Ich_bastel_in_VB schrieb:

    Wie erzeuge ich nun abhängig von der Variable "CAD_Umgebung" die passende Instanz?
    So was:

    VB.NET-Quellcode

    1. Public Function Create() As CADFunktionenBasis
    2. Dim CAD_Umgebung As String = My.Settings.Umgebung
    3. Select Case CAD_Umgebung
    4. Case "ProE" : Return New ProE_CADFunktionen()
    5. Case "Catia" : Return New Catia_CADFunktionen()
    6. Case "NX" : Return New NX_CADFunktionen()
    7. End Select
    8. Return Nothing
    9. End Function
    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!
    Doppelklicke auf das abgerundete Quadrat neben dem Thread-Titel.
    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!