Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Grundlegende Reflection | Generics & Reflection
Fortgeschrittenes C# mit .NET
course content

Kursinhalt

Fortgeschrittenes C# mit .NET

Fortgeschrittenes C# mit .NET

1. Einführung in die Desktop-Entwicklung mit .NET
2. Interaktive GUI
3. Threading
4. Generics & Reflection

book
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:

cs

index

copy
12345678910
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:

cs

index

copy
1234
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:

cs

index

copy
12
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.

cs

index

copy
1
MethodInfo[] methods = exampleType.GetMethods();

Wir können auch eine einzelne Methode aus einer Klasse mit GetMethod abrufen:

cs

index

copy
1
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:

cs

index

copy
1
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:

cs

index

copy
12
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?

Was macht die GetType-Methode in C#?

Was macht die GetType-Methode in C#?

Wählen Sie die richtige Antwort aus

Wie kann man mit Reflection eine Liste aller Eigenschaften eines Typs erhalten?

Wie kann man mit Reflection eine Liste aller Eigenschaften eines Typs erhalten?

Wählen Sie die richtige Antwort aus

Was ist die korrekte Methode, um eine Methode aufzurufen, die zwei Argumente vom Typ `string` und `int` hat?

Was ist die korrekte Methode, um eine Methode aufzurufen, die zwei Argumente vom Typ string und int hat?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 7
We're sorry to hear that something went wrong. What happened?
some-alt