AddressOf Funktion als Parameter in einer anderen Funktion

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    AddressOf Funktion als Parameter in einer anderen Funktion

    Wie der Titel schon sagt, möchte ich ein Funktionsnamen als Parameter in einer anderen Funktion.

    Die Funktion sieht momentan noch so aus:

    VB.NET-Quellcode

    1. Public Sub Test(ByVal sObjEventHandler As System.Delegate)
    2. End Sub


    Ich habe den Inhalt der Funktion enfernt, da diese über 500 Zeilen lang ist.

    und so ruf ich sie auf:

    VB.NET-Quellcode

    1. Test(New EventHandler(AddressOf TestClick))


    Jetzt möchte ich nicht mehr New EventHandler schreiben, sondern direkt AddressOf TestClick

    Wie kann ich das machen?

    VB.NET-Quellcode

    1. Dim MyEvent As EventHandler = AddressOf TestClick
    2. MyEvent(deineDaten)


    Quelle: java2s.com/Tutorial/VB/0220__E…tHandlerwithAddressOf.htm

    Gruß
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Du hast es falsch verstanden. Die Funktion test weißt einem Event eine Funktion zu. Das geschiet alles dynamisch. Momentan ruf ich die Funktion Test noch mit dem Parameter New EventHandler auf, aber ich möchte am besten AddressOf Funktion verwenden
    Vielleicht hilft die MSDN zum Thema "AddressOf":
    The AddressOf operator can be used as the operand of a delegate constructor or it can be used in a context in which the type of the delegate can be determined by the compiler.

    Der erste Teil ist nicht gewünscht, also kann nur der zweite Fall zutreffen.
    Wenn man es SO macht, geht's:

    VB.NET-Quellcode

    1. Private Delegate Sub dlgfoo()
    2. Private Sub foo()
    3. End Sub
    4. Private Sub bar(ByRef a As dlgfoo)
    5. End Sub
    6. Private Sub baz()
    7. bar(AddressOf foo)
    8. End Sub

    Läßt man die Deklaration von dlgfoo weg und setzt in bar() "nur" den generischen Typ "Delegate" geht's nicht. Würde also bedeuten, dass der zweite Teil genau diesen Fall beschreibt.
    Das bedeutet dann aber, das man das ganze nur machen kann, wenn die Signatur der zu übergebenden Methode bekannt ist.