Kursinhalt
Fortgeschrittenes C# mit .NET
Fortgeschrittenes C# mit .NET
Grundlegende Reflection
In diesem Kapitel werden wir die grundlegenden und wichtigen Funktionen der Reflection behandeln, die in der Web- und UI-Entwicklung mit C# nützlich sein könnten.
Abrufen der Typen von Objekten zur Laufzeit
Die erste Funktion ist die, die wir bereits im letzten Kapitel untersucht haben. Es ist die GetType
-Methode. Die GetType
-Methode gibt uns den Typ eines beliebigen Objekts. Dies kann nützlich sein, wenn wir Entscheidungen basierend auf den Typen von Objekten treffen möchten:
index
static float ExampleMethod(object value) { if(value.GetType() == typeof(int)) { return (float) value * 2; } return (float) value; }
Es ist wichtig zu beachten, dass wir die typeof
-Funktion nicht mit Objekten verwenden können, sondern mit Klassennamen:
index
int value = 10; typeof(value) // Incorrect typeof(int) // Correct, returns "System.Int32" typeof(long) // Correct, returns "System.Int64"
Es gibt eine Klasse namens Type
, die im Namespace System.Reflection
definiert ist. Wir können Variablen vom Typ Type
erstellen und das Ergebnis von GetType
oder typeof
in diesen Variablen speichern:
index
Type exampleVar1 = value.GetType(); Type exampleVar2 = typeof(int);
Die typeof
Funktion ist nicht genau dasselbe wie die GetType()
Methode. Beide geben eine Type
-Instanz zurück, jedoch gibt typeof
die Type
-Instanz einer Klasse zur Kompilierungszeit zurück, während die GetType()
-Methode die Type
-Instanz eines Objekts zur Laufzeit zurückgibt. Dies liegt daran, dass das Programm bei der Verwendung von typeof(int)
im Wesentlichen bereits weiß, dass der Datentyp int
ist, es muss ihn einfach in eine Type
-Instanz übersetzen. Während im Fall von value.GetType()
das Programm den Typ des value
-Objekts herausfinden muss.
Eine Liste aller Eigenschaften eines Typs erhalten
Die Type
-Objekte haben eine Methode namens GetProperties
, die die Liste aller öffentlichen Eigenschaften im Zieltyp abrufen kann.
Die Eigenschaftsreferenzen können in einem Array vom Typ PropertyInfo
gespeichert werden. Die PropertyInfo
-Klasse ist im System.Reflection
-Namespace definiert und verfügt über eine Vielzahl nützlicher Attribute und Methoden.
Einzelne spezifische Eigenschaftenreferenzen können auch mit der GetProperty
-Methode abgerufen werden.
Die GetProperty
-Methode gibt die Eigenschaft zurück, die mit dem propertyName
übereinstimmt. Andernfalls gibt sie null
zurück.
Eine Liste aller Methoden eines Typs erhalten
Wir können eine Liste aller Methoden eines bestimmten Typs erhalten, indem wir die Methode GetMethods
der Type
-Instanz aufrufen.
Die Methodenreferenzen können in einem Array vom Typ MethodInfo
gespeichert werden, das ebenfalls im Namespace System.Reflection
definiert ist.
index
MethodInfo[] methods = exampleType.GetMethods();
Wir können auch eine einzelne Methode aus einer Klasse mit GetMethod
abrufen:
index
MethodInfo method = exampleType.GetMethod("methodName");
Die GetMethod
-Methode gibt die erste Methode zurück, die mit dem Namen methodName
übereinstimmt. Wenn es keine solche Methode gibt, wird null
zurückgegeben.
Die MethodInfo
-Klasse hat eine Methode namens Invoke
, die die folgenden Argumente annimmt:
index
Invoke(objectReference, arguments);
Hier muss objectReference ein Objekt des Typs sein, von dem die Methode stammt. Die arguments
können entweder durch null
im Falle von keinen Argumenten oder durch ein Array vom Typ object
dargestellt werden. Zum Beispiel:
index
method.Invoke(exampleObject, null); method.Invoke(exampleObject, new object[] { "first", "second", 1, 2, 3.4f, 5.67, true });
1. Was macht die GetType-Methode in C#?
2. Wie kann man mit Reflection eine Liste aller Eigenschaften eines Typs erhalten?
3. Was ist die korrekte Methode, um eine Methode aufzurufen, die zwei Argumente vom Typ string
und int
hat?
Danke für Ihr Feedback!