Manuelles LateBinding

Sunray

Erfahrenes Mitglied
Hi Leute,
ich würde gerne den dynamischen Zugriff auf Mitglieder zur Laufzeit ermöglichen. Meine Funktion kriegt bei ihrem Aufruf eine beliebige Instanz, ein Objekt Array (Argumente) und den Namen des Mitglieds.
Code:
Dim v as new CValue(myObj)
v.CallMember("ToString")
Irgend sowas. Habs zunächst über Reflection versucht, aber da gibt es so viele Fälle zu unterscheiden und die Regeln, nach denen der richtige Overload gesucht wird, kenne ich auch nicht (was ist näher an int32: float oder decimal?).

Visual Basic .NET kann das ja schliesslich auch. Ich habe mir mal den MSIL-Code angesehen und Aufrufe von Microsoft.VisualBasic.CompilerServices.LateBinding.[Verschiedenes] gefunden. *MSDN-Doku aufmach* Hm... "This code is not intended to be call by your code" Viel mehr verraten die Dokumente nicht. Habs trotzdem mal so probiert. Funktioniert bestens, ausser, wenns um statische Aufrufe geht.

In meinem Programm versuche ich zwei mal mit denselben Argumenten, ein und dieselbe statische Methode aufzurufen. Beim ersten Mal klapps, beim zweiten Mal bekomm ich eine NullReferenceException zugeworfen. Wie es dazu kommt konnte ich trotz "ildasm microsoft.visualbasic.dll" nicht herausfinden. (Microsoft vertreibt nicht zufällig irgendwo die Debug-Symbole des Frameworks oder?)

Gibt es nicht eine elegantere Lösung als sich per Reflection durch sämtliche Mitglieder eines Typs zu quälen?
 
Zurück