Reflexion und Introspektion in C#: Wie man in seinen eigenen Code hineinschaut

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Die Magie der Spiegelung

Stellen Sie sich vor, Sie schreiben Code, der sich selbst "betrachten" kann. Nicht wie in einem Zerrspiegel, sondern wie in einem Röntgengerät – die Struktur, Eigenschaften, Methoden sehen und sie sogar ausführen kann, ohne den Klassennamen zur Kompilierzeit zu kennen. Das ist keine Magie, das ist Reflexion in C# (Spiegelung) und ihre "kleine Schwester" – Introspektion in C#.



Wozu braucht man das? Stellen Sie sich vor, Sie schreiben ein Plugin-System, einen JSON-Deserialisierer oder einen dynamischen Methodenaufruf. Ohne Reflexion müssten Sie eine Menge if-else schreiben. Damit reichen ein paar Zeilen. Klingt spannend? Dann legen wir los.



In diesem Artikel gehen wir nicht nur die Theorie durch. Wir schreiben echte Codebeispiele, die Sie sofort in Projekten verwenden können. Sie erfahren, wie Sie Informationen über jeden Typ abrufen, ein Objekt "aus dem Nichts" erstellen, eine private Methode aufrufen und sogar Attribute lesen. Und das alles in C#, das für seine Strenge und Leistungsfähigkeit so geschätzt wird.



Was sind Reflexion und Introspektion in C#? Der Unterschied der Begriffe

Oft werden diese Begriffe synonym verwendet, aber es gibt eine feine Grenze:

  • Introspektion C# – ist die Fähigkeit eines Programms, seine eigene Struktur zu beobachten. Sie können herausfinden, welche Felder eine Klasse hat, welche Methoden sie enthält, welche Attribute daran hängen. Aber Sie ändern nichts.
  • Reflexion C# – ist ein breiterer Begriff. Sie umfasst die Introspektion sowie die Möglichkeit, mit dem Code zu interagieren: Methoden aufrufen, Objekte erstellen, Feldwerte ändern.

Einfach gesagt: Introspektion ist "hinschauen", Reflexion ist "hinschauen und anfassen". In C# ist für beide Funktionen der Namensraum System.Reflection zuständig. Das ist Ihr wichtigstes Werkzeug.



Praktisches Beispiel: Typinformationen abrufen (Type)

Alles beginnt mit der Klasse Type. Sie ist das Fundament der Reflexion. Sie können sie auf drei Arten erhalten:

// Methode 1: über typeof()Type typeFromKeyword = typeof(string);

// Methode 2: über eine Instanz .GetType()string example = "Hallo, Welt!";Type typeFromInstance = example.GetType();

// Methode 3: über eine AssemblyType typeFromAssembly = Assembly.GetExecutingAssembly().GetType("System.String");


Mit einem Type-Objekt können wir jetzt alles über die Klasse erfahren. Schreiben wir eine nützliche Methode für die Introspektion:



using System;using System.Reflection;

public class Inspector{ public static void ShowTypeInfo(Type type) { Console.WriteLine($"=== Typinformationen: {type.Name} ==="); Console.WriteLine($"Vollständiger Name: {type.FullName}"); Console.WriteLine($"Ist es eine Klasse? {type.IsClass}"); Console.WriteLine($"Ist es abstrakt? {type.IsAbstract}"); Console.WriteLine($"Basisklasse: {type.BaseType?.Name}"); Console.WriteLine("Öffentliche Eigenschaften:"); foreach (PropertyInfo prop in type.GetProperties()) { Console.WriteLine($" - {prop.PropertyType.Name} {prop.Name}"); } Console.WriteLine("Öffentliche Methoden:"); foreach (MethodInfo method in type.GetMethods()) { Console.WriteLine($" - {method.ReturnType.Name} {method.Name}({string.Join(", ", method.GetParameters().Select(p => $"{p.ParameterType.Name} {p.Name}"))})"); } }}

// VerwendungInspector.ShowTypeInfo(typeof(List<int>));/* Ausgabe:=== Typinformationen: List`1 ===Vollständiger Name: System.Collections.Generic.List`1[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]Ist es eine Klasse? TrueIst es abstrakt? FalseBasisklasse: Object

Öffentliche Eigenschaften: - Int32 Capacity - Int32 Count

Öffentliche Methoden: - Void Add(Int32 obj) - Void Clear() - Boolean Contains(Int32 item) ... und viele weitere*/


Das ist reine Introspektion.

Blogs

Buchempfehlungen