Reflection - Rausfinden, ob Methode Sub oder Function ist

  • VB.NET

Es gibt 48 Antworten in diesem Thema. Der letzte Beitrag () ist von Samus Aran.

    Warum denn nicht?
    Stell dir vor, jemand schaut sich die Klasse an und dann ist da ein Event namens "YouDontSay" mit einem EventHandler "YouDontSayEventHandler", dessen Signatur du nicht kennst, weil er nicht angezeigt wird.
    Ich fänds eher kontraproduktiv, sie auszublenden.
    Der Code der DLL ist jetzt so:

    VB.NET-Quellcode

    1. Public Class lol
    2. Public Property nope
    3. Public Function ARCHIMEDES() As String
    4. Return "NEIN"
    5. End Function
    6. Public Sub ohmyGawd()
    7. End Sub
    8. Private Event WHOOPS()
    9. Public Event YouDontSay()
    10. End Class
    Wo hab ich da nen Handler? Abgesehen davon schmeißt die Zeile

    VB.NET-Quellcode

    1. For Each m In o.GetType(ty.Namespace & "." & ty.Name).GetProperties(BindingFlags.Public Or BindingFlags.NonPublic)
    ne Exception, wenn der EventHandler nach der "richtigen" Klasse drankommt, was ich nicht möchte.
    Das ist komisch.
    Muss ich bei Zeiten mal testen.

    Ehrlich gesagt fiele mir im Moment keine Möglichkeit ein, so was verlässlich zu überprüfen.
    Der EventHandler wird wahrscheinlich automatisch generiert...
    Ich machs jetzt so:

    VB.NET-Quellcode

    1. For Each ty In o.GetExportedTypes()
    2. If Not ty.IsNested AndAlso ty.IsClass Then 'etc
    , das scheint zu funktionieren.
    Jetzt bastel ich mir noch nen Weg, die get/set/add/remove-Methoden rauszufiltern, dann wars das eigentlich schon, lol
    Nested Types sind Typen, die innerhalb von Typen sind:

    VB.NET-Quellcode

    1. Public Class XY
    2. Public Class YX
    3. End Class
    4. End Class

    Der vbc macht des öfteren einfach mal ein paar Sachen, die nicht explizit dastehen (und auch abartig sind). Ich definiere grundsätzlich immer Delegaten für Ereignisse, da man sonst keine schöne Weiterleitung usw. erzwingen kann:

    VB.NET-Quellcode

    1. Public Delegate Sub MyEventDelegate
    2. Public Sub AddHandlerInstance(ByVal handler As MyEventDelegate)
    3. AddHandler Something.MyEvent, handler
    4. End Sub

    bzw. ich weiß nicht, ob und wie das in VB ohne explizite Angabe des Delegaten ermöglicht wird, aber es ist trotzdem imho nicht schön. Meistens verwendet man eh EventHandler bzw. EventHandler(Of EventArgs).

    Gruß
    ~blaze~