Aufruf von .NET-Klassendaten mit Reflection

Unter Programmierern wird häufig belächelt, welche Entwicklung die traditionelle „Hello World“-Anfängeranwendung infolge der zunehmenden Kenntnisse des Entwicklers nimmt. Am Anfang steht der allseits bekannte und beliebte simple Einzeiler, der dann mehrere Phasen durchläuft und schließlich in seitenlangem, stark objekt-orientiertem C++-Code endet, mit demselben Ergebnis wie der ursprüngliche Einzeiler. Diesen Vorgang sollten Sie sich vor Augen halten, wenn Sie den C#-Source-Code in Listing B betrachten, der den Reflection-Methodenaufruf verwendet, um eine ähnlich umfassende Umsetzung der bewährten „Hello World“-Anwendung zu erreichen.

Der entscheidende Vorgang liegt hier in der Methode LateBoundCall, die eine Instanz von HelloHello akzeptiert und auf System.Object konvertiert und die InvokeMember-Methode der Type-Klasse zum spät gebundenen Aufruf von HelloHello.SaySomething verwendet. Diese Funktionalität eignet sich für Fälle, in denen Sie eine Methode für ein Objekt aufrufen müssen, ohne dessen exakten Typ zu kennen. InvokeMember akzeptiert bestimmte Parameter, die den Namen und den Typ der aufzurufenden Methode angeben, wie der Aufruf ausgeführt werden soll und welche Argumente an die aufgerufene Methode übergeben werden sollen. Die Parameter zum einfachen Überschreiben von InvokeMember sowie deren Bedeutungen sind in Tabelle B aufgeführt.

name Ein String mit dem Namen des aufzurufenden Members
invokeAttr Eine Bitmaske aus System.Reflection.BindingFlags-Werten, die angeben, auf was für ein Member zugegriffen werden soll, wie die Reflection-API nach dem genannten Member suchen soll und wie das Member aufgerufen werden soll. Sie müssen mindestens einen Access Descriptor-Wert angeben (verwenden Sie InvokeMethod um einfach eine bekannte Methode aufzurufen)
binder Ein System.Reflection.Binder-Objekt, das Kriterien wie Typanpassung und die Auswahl der geeigneten überladenen Methode überprüft. In den meisten Fällen kann null oder Nothing übergeben und der Standardbinder verwendet werden
target Eine Instanz des Objekts, über das ein Member aufgerufen werden soll
args Ein Objekt-Array mit allen Argumenten, die an ein Member übergeben werden sollen

Tabelle B: Erklärung der Parameter für InvokeMethod

Sparsamer Gebrauch

Obwohl die Reflection-Features von .NET eine äußerst wirkungsvolle Vorgehensweise zur Ermittlung der Eigenschaften eines Objekts während der Laufzeit bieten, sollten sie wirklich nur im Bedarfsfall verwendet werden, da die Untersuchung der Metadaten für eine Klasse sowie der spät gebundene Methodenaufruf sehr rechenintensive Verfahren darstellen.

Themenseiten: Anwendungsentwicklung, Software

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Aufruf von .NET-Klassendaten mit Reflection

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *