Sub als Parameter

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Sub als Parameter

    Hallo,

    ich würde gerne einem Sub als Parameter einen Sub übergeben.

    Der Sub den ich habe soll erst ein paar andere Sachen ausführen und dann den Sub der übergeben wurde.

    VB.NET-Quellcode

    1. Private Sub Hallo(Byval X As Sub())
    2. End Sub

    funktioniert natürlich nicht.
    Weiss jemand wie ich das hinbekomme?


    Mfg Kevin
    Beispiel für Delegaten:

    VB.NET-Quellcode

    1. Private Delegate Sub SomeSubDelegate(ByVal a As String, ByVal b As String)
    2. Private Sub Hallo(ByVal X As SomeSubDelegate)
    3. X("Hallo!", "Test")
    4. End Sub
    5. ' Übergabe
    6. Hallo(AddressOf EinSubDasZweiStringsAlsParameterNimmt)
    Es gibt viele vordefinierte Delegaten, bspw. Action.
    Pseudo habe ich mir das so vorgestellt:

    VB.NET-Quellcode

    1. Sub Main()
    2. Happens(Sub() Logout()))
    3. End Sub
    4. Private Sub Happens(ByVal X As Sub())
    5. While True
    6. Dim S As String = New Net.WebClient().DownloadString("...")
    7. If Not S.Contains("ex") Then
    8. Label1.Text = "Kommt noch vor"
    9. Else
    10. X()
    11. End If
    12. End While
    13. End Sub
    14. Private Sub Logout()
    15. ' Ausloggen..
    16. End Sub


    Dass man halt einen Sub übergeben kann der beliebige Aktionen beinhaltet.

    Konstant kann ich das nicht machen, weil ich es eigentlich für eine Klassenbibliothek nutzen wollte.
    Der User kann einem Sub/Funktion einen Sub übergeben der dann ausgeführt wird.
    Die Stelle an welcher der übergebene Sub ausgeführt wird ist natürlich konstant das ist klar.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Kevin Hombre“ ()

    VB.NET-Quellcode

    1. Sub Main()
    2. Happens(AddressOf LogIn)
    3. Happens(AddressOf Logout)
    4. End Sub
    5. Private Sub Happens(ByVal action As Action)
    6. While True
    7. Dim S As String = New Net.WebClient().DownloadString("...")
    8. If Not S.Contains("ex") Then
    9. Label1.Text = "Kommt noch vor"
    10. Else
    11. action()
    12. End If
    13. End While
    14. End Sub
    15. Private Sub LogIn()
    16. ' Einloggen..
    17. End Sub
    18. Private Sub Logout()
    19. ' Ausloggen..
    20. End Sub

    Eine ziemliche Erweiterung erfährt dein Ansatz auch durch anonyme Methoden

    VB.NET-Quellcode

    1. Sub Main()
    2. Happens(AddressOf LogIn)
    3. Happens(AddressOf Logout)
    4. Happens(Sub() MessageBox.Show("ich bin eine anonyme Action"))
    5. End Sub

    Liesma in Alles über Events nach, insbesondere über Delegaten, generische Delegaten und Signaturen.

    Es sind nämlich nicht nur Parameterlose Subs möglich, sondern alle Arten und Anzahlen von Parametern, und auch Rückgabewerte