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.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

EU-Datenschützer kritisieren Facebooks „Zustimmung oder Bezahlung“-Modell

Ohne eine kostenlose Alternative, die ohne Zustimmung zur Verarbeitung personenbezogener Daten zu Werbezwecken auskommt, ist…

1 Woche ago

Europol meldet Zerschlagung der Phishing-as-a-Service-Plattform LabHost

LabHost gilt als einer der größten Phishing-Dienstleister weltweit. Die Ermittler verhaften 37 Verdächtige, darunter der…

1 Woche ago

DE-CIX Frankfurt bricht Schallmauer von 17 Terabit Datendurchsatz pro Sekunde

Neuer Datendurchsatz-Rekord an Europas größtem Internetknoten parallel zum Champions-League-Viertelfinale.

1 Woche ago

Samsungs neuer LPDDR5X-DRAM erreicht 10,7 Gbit/s

Die neuen Chips bieten bis zu 25 Prozent mehr Leistung. Samsung steigert auch die Energieeffizienz…

1 Woche ago

Cisco warnt vor massenhaften Brute-Force-Angriffen auf VPNs

Betroffen sind Lösungen von Cisco, Fortinet, SonicWall und anderen Anbietern. Die Hacker nehmen Konten mit…

1 Woche ago

Cybersicherheit in KMUs: Es herrscht oft Aufholbedarf

Immer häufiger müssen sich Betriebe gegen Online-Gefahren wehren. Vor allem in KMUs werden oft noch…

1 Woche ago