.NET-HILFE

C# Reflection (Wie es für Entwickler funktioniert)

Veröffentlicht 27. Januar 2024
Teilen Sie:

In der Welt der Softwareentwicklung ist C# eine vielseitige und leistungsstarke Programmiersprache, die Entwicklern eine breite Palette von Funktionen bietet.

Eines dieser Merkmale, das sich durch seine Flexibilität und Dynamik auszeichnet, ist die Reflexion. Reflexion in C# ermöglicht es Entwicklern, die Metadaten von Typen während der Laufzeit zu prüfen und mit ihnen zu interagieren. Diese Fähigkeit eröffnet eine neue Dimension von Möglichkeiten, die es Entwicklern ermöglicht, flexiblere, erweiterbare und robustere Anwendungen zu erstellen.

In diesem Artikel werden wir uns mit den Feinheiten von C# Reflection beschäftigen und die wichtigsten Konzepte, Anwendungsfälle und Best Practices untersuchen. Wir finden auch die Reflexionsinformationen des PdfDocument-Objekts von IronPDF.

Reflexion in C##

Reflection ist ein Mechanismus, der es einem Programm ermöglicht, seine Struktur und sein Verhalten zur Laufzeit zu untersuchen und zu manipulieren. In C# wird dies durch den System.Reflection-Namensraum erreicht, der Klassen und Methoden für die Interaktion mit Metadaten, den Erhalt von Informationen über Typen und sogar die dynamische Erstellung von Instanzen bereitstellt.

Schlüsselkomponenten der Reflexion

Typ Klasse

Das Herzstück der C#-Reflection ist die Klasse Type, die einen Typ in der .NET-Laufzeitumgebung darstellt. Diese Klasse bietet eine Fülle von Informationen über einen Typ, einschließlich aller öffentlichen Methoden, Eigenschaften, Felder, Ereignisse und Methodenparameter.

Sie können ein Type-Objekt für einen bestimmten Typ mit verschiedenen Methoden erhalten, z. B. mit der Methode typeof() Operator oder durch Aufruf des GetType() Methode für ein Objekt.

using System;

class Program
{
    static void Main()
    {
        // Using typeof to get Type information for string
        Type stringType = typeof(string);
        Console.WriteLine("Information about the string type:");
        Console.WriteLine($"Type Name: {stringType.Name}");
        Console.WriteLine($"Full Name: {stringType.FullName}");
        Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}");
    }
}
using System;

class Program
{
    static void Main()
    {
        // Using typeof to get Type information for string
        Type stringType = typeof(string);
        Console.WriteLine("Information about the string type:");
        Console.WriteLine($"Type Name: {stringType.Name}");
        Console.WriteLine($"Full Name: {stringType.FullName}");
        Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		' Using typeof to get Type information for string
		Dim stringType As Type = GetType(String)
		Console.WriteLine("Information about the string type:")
		Console.WriteLine($"Type Name: {stringType.Name}")
		Console.WriteLine($"Full Name: {stringType.FullName}")
		Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}")
	End Sub
End Class
VB   C#

Ausgabe

C# Reflexion (Wie es für Entwickler funktioniert): Abbildung 1

Montageklasse

Eine Assembly ist in .NET eine Einheit für die Bereitstellung und Versionierung. Die Klasse Assembly im System.Reflection-Namensraum bietet Methoden zum Laden und Beschreiben von Assemblies und zum dynamischen Prüfen von Assembly-Informationen.

Sie können ein Assembly-Objekt für jede Instanz der aktuell ausgeführten Assembly oder für jede referenzierte Assembly erhalten.

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        // Example 1: Get information about the executing assembly
        Assembly executingAssembly = Assembly.GetExecutingAssembly();
        Console.WriteLine("Information about the executing assembly:");
        DisplayAssemblyInfo(executingAssembly);

        // Example 2: Load the mscorlib assembly
        Assembly mscorlibAssembly = Assembly.Load("mscorlib");
        Console.WriteLine("\nInformation about the mscorlib assembly:");
        DisplayAssemblyInfo(mscorlibAssembly);
    }

    static void DisplayAssemblyInfo(Assembly assembly)
    {
        Console.WriteLine($"Assembly Name: {assembly.GetName().Name}");
        Console.WriteLine($"Full Name: {assembly.FullName}");
        Console.WriteLine($"Location: {assembly.Location}");
        Console.WriteLine("\nModules:");

        foreach (var module in assembly.GetModules())
        {
            Console.WriteLine($"- {module.Name}");
        }

        Console.WriteLine(new string('-', 30));
    }
}
using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        // Example 1: Get information about the executing assembly
        Assembly executingAssembly = Assembly.GetExecutingAssembly();
        Console.WriteLine("Information about the executing assembly:");
        DisplayAssemblyInfo(executingAssembly);

        // Example 2: Load the mscorlib assembly
        Assembly mscorlibAssembly = Assembly.Load("mscorlib");
        Console.WriteLine("\nInformation about the mscorlib assembly:");
        DisplayAssemblyInfo(mscorlibAssembly);
    }

    static void DisplayAssemblyInfo(Assembly assembly)
    {
        Console.WriteLine($"Assembly Name: {assembly.GetName().Name}");
        Console.WriteLine($"Full Name: {assembly.FullName}");
        Console.WriteLine($"Location: {assembly.Location}");
        Console.WriteLine("\nModules:");

        foreach (var module in assembly.GetModules())
        {
            Console.WriteLine($"- {module.Name}");
        }

        Console.WriteLine(new string('-', 30));
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Reflection

Friend Class Program
	Shared Sub Main()
		' Example 1: Get information about the executing assembly
		Dim executingAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
		Console.WriteLine("Information about the executing assembly:")
		DisplayAssemblyInfo(executingAssembly)

		' Example 2: Load the mscorlib assembly
		Dim mscorlibAssembly As System.Reflection.Assembly = System.Reflection.Assembly.Load("mscorlib")
		Console.WriteLine(vbLf & "Information about the mscorlib assembly:")
		DisplayAssemblyInfo(mscorlibAssembly)
	End Sub

	Private Shared Sub DisplayAssemblyInfo(ByVal assembly As System.Reflection.Assembly)
		Console.WriteLine($"Assembly Name: {assembly.GetName().Name}")
		Console.WriteLine($"Full Name: {assembly.FullName}")
		Console.WriteLine($"Location: {assembly.Location}")
		Console.WriteLine(vbLf & "Modules:")

		For Each [module] In assembly.GetModules()
			Console.WriteLine($"- {[module].Name}")
		Next [module]

		Console.WriteLine(New String("-"c, 30))
	End Sub
End Class
VB   C#

Ausgabe

C# Reflexion (Wie es für Entwickler funktioniert): Abbildung 2

MethodInfo-, PropertyInfo-, FieldInfo- und EventInfo-Klassen

Diese Klassen repräsentieren jeweils öffentliche Mitglieder, Methoden, Eigenschaften, Felder und Ereignisse. Sie geben Informationen über diese Mitglieder preis, z. B. ihre Namen, Typen, Zugänglichkeit und mehr.

Sie können über die Klasse Type Zugriff auf Instanzen dieser Klassen erhalten.

using System;
using System.Reflection;

class MyClass
{
    public void MyMethod() { }
    public int MyProperty { get; set; }
    public string myField;
    public event EventHandler MyEvent;
}

class Program
{
    static void Main()
    {
        // Get MethodInfo for MyMethod
        MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod");
        Console.WriteLine($"Method Name: {methodInfo.Name}");

        // Get PropertyInfo for MyProperty
        PropertyInfo propertyInfo = typeof(MyClass).GetProperty("MyProperty");
        Console.WriteLine($"Property Name: {propertyInfo.Name}");

        // Get FieldInfo for myField
        FieldInfo fieldInfo = typeof(MyClass).GetField("myField");
        Console.WriteLine($"Field Name: {fieldInfo.Name}");

        // Get EventInfo for MyEvent
        EventInfo eventInfo = typeof(MyClass).GetEvent("MyEvent");
        Console.WriteLine($"Event Name: {eventInfo.Name}");
    }
}
using System;
using System.Reflection;

class MyClass
{
    public void MyMethod() { }
    public int MyProperty { get; set; }
    public string myField;
    public event EventHandler MyEvent;
}

class Program
{
    static void Main()
    {
        // Get MethodInfo for MyMethod
        MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod");
        Console.WriteLine($"Method Name: {methodInfo.Name}");

        // Get PropertyInfo for MyProperty
        PropertyInfo propertyInfo = typeof(MyClass).GetProperty("MyProperty");
        Console.WriteLine($"Property Name: {propertyInfo.Name}");

        // Get FieldInfo for myField
        FieldInfo fieldInfo = typeof(MyClass).GetField("myField");
        Console.WriteLine($"Field Name: {fieldInfo.Name}");

        // Get EventInfo for MyEvent
        EventInfo eventInfo = typeof(MyClass).GetEvent("MyEvent");
        Console.WriteLine($"Event Name: {eventInfo.Name}");
    }
}
Imports System
Imports System.Reflection

Friend Class [MyClass]
	Public Sub MyMethod()
	End Sub
	Public Property MyProperty() As Integer
	Public myField As String
	Public Event MyEvent As EventHandler
End Class

Friend Class Program
	Shared Sub Main()
		' Get MethodInfo for MyMethod
		Dim methodInfo As MethodInfo = GetType([MyClass]).GetMethod("MyMethod")
		Console.WriteLine($"Method Name: {methodInfo.Name}")

		' Get PropertyInfo for MyProperty
		Dim propertyInfo As PropertyInfo = GetType([MyClass]).GetProperty("MyProperty")
		Console.WriteLine($"Property Name: {propertyInfo.Name}")

		' Get FieldInfo for myField
		Dim fieldInfo As FieldInfo = GetType([MyClass]).GetField("myField")
		Console.WriteLine($"Field Name: {fieldInfo.Name}")

		' Get EventInfo for MyEvent
		Dim eventInfo As EventInfo = GetType([MyClass]).GetEvent("MyEvent")
		Console.WriteLine($"Event Name: {eventInfo.Name}")
	End Sub
End Class
VB   C#

Ausgabe

C# Reflexion (Wie es für Entwickler funktioniert): Abbildung 3

Einführung in IronPDF

IronPDF ist eine leistungsstarke C#-Bibliothek, die umfassende Funktionen für die Arbeit mit PDF-Dokumenten in .NET-Anwendungen bietet. Es ermöglicht Entwicklern die einfache Erstellung, Bearbeitung und Extraktion von Daten aus bestehenden Objekten, wie z. B. PDF-Dateien, mithilfe einer einfachen und intuitiven API.

Eine bemerkenswerte Eigenschaft von IronPDF ist seine Fähigkeit, sich nahtlos in bestehende C#-Projekte zu integrieren, was es zu einer ausgezeichneten Wahl für das Hinzufügen von PDF-Erzeugungs- und -Bearbeitungsfunktionen macht.

Hauptmerkmale von IronPDF

Einige der wichtigsten Merkmale von IronPDF sind die folgenden

  1. PDF-Generierung: Erzeugen Sie mühelos PDF-Dokumente von Grund auf oder konvertieren Sie HTML, Bilder und andere Formate in PDF.

  2. PDF-Manipulation: Bearbeiten Sie vorhandene PDFs, indem Sie Text, Bilder und Anmerkungen hinzufügen, entfernen oder ändern.

  3. PDF-Extraktion: Extrahieren Sie Text, Bilder und Metadaten aus PDF-Dateien zur weiteren Verarbeitung.

  4. HTML-zu-PDF-Konvertierung: Konvertieren Sie HTML-Inhalte, einschließlich CSS und JavaScript, in hochwertige PDF-Dateien.

  5. PDF-Formulare: Erstellen und füllen Sie interaktive PDF-Formulare programmgesteuert aus.

  6. Sicherheit: Wenden Sie Verschlüsselung und Passwortschutz an, um PDF-Dokumente zu schützen.

    Lassen Sie uns nun anhand eines detaillierten Codebeispiels erkunden, wie Sie C#-Reflection mit IronPDF verwenden können.

Verwendung von C# Reflexion mit IronPDF

In diesem einfachen Beispiel werden wir die Informationen über das IronPDF PDF-Dokumentenobjekt mithilfe von C#-Reflection abrufen.

IronPDF NuGet-Paket installieren

Stellen Sie sicher, dass Sie das IronPDF NuGet-Paket in Ihrem Projekt installieren. Sie können dies über die NuGet Package Manager Console tun:

Install-Package IronPdf

Verwendung von C# Reflection, um Daten von IronPDF PDF Document Object zu erhalten

using IronPdf;
using System;

Type PDF = typeof(PdfDocument);
Console.WriteLine("Information about the PdfDocument type:");
Console.WriteLine($"Type Name: {PDF.Name}");
Console.WriteLine($"Full Name: {PDF.FullName}");
Console.WriteLine($"Assembly Qualified Name: {PDF.AssemblyQualifiedName}");
Console.WriteLine("\nMembers:");
foreach (var memberInfo in PDF.GetMembers())
{
    Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}");
}
using IronPdf;
using System;

Type PDF = typeof(PdfDocument);
Console.WriteLine("Information about the PdfDocument type:");
Console.WriteLine($"Type Name: {PDF.Name}");
Console.WriteLine($"Full Name: {PDF.FullName}");
Console.WriteLine($"Assembly Qualified Name: {PDF.AssemblyQualifiedName}");
Console.WriteLine("\nMembers:");
foreach (var memberInfo in PDF.GetMembers())
{
    Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}");
}
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System

Private PDF As Type = GetType(PdfDocument)
Console.WriteLine("Information about the PdfDocument type:")
Console.WriteLine($"Type Name: {PDF.Name}")
Console.WriteLine($"Full Name: {PDF.FullName}")
Console.WriteLine($"Assembly Qualified Name: {PDF.AssemblyQualifiedName}")
Console.WriteLine(vbLf & "Members:")
For Each memberInfo In PDF.GetMembers()
	Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}")
Next memberInfo
VB   C#

Der bereitgestellte C#-Code nutzt Reflection, um Informationen über den Typ PdfDocument aus der IronPDF-Bibliothek zu erhalten. Ursprünglich war der "typeof(PdfDocument)ausdruck wird verwendet, um das Objekt "Type" abzurufen, das den Typ PdfDocument darstellt.

Anschließend werden verschiedene Eigenschaften des erhaltenen "Type"-Objekts auf der Konsole ausgegeben, darunter der Name des Typs, der vollständige Name und der qualifizierte Name der Baugruppe.

Zusätzlich verwendet der Code eine "Foreach"-Schleife, um die Elemente des Typs PdfDocument zu durchlaufen und Informationen über jedes Element, wie z. B. den Elementtyp und den Namen, auszugeben.

Dieser Ansatz zeigt die Verwendung von Reflexion, um die Struktur und die Metadaten von Objekten des Typs PdfDocument während der Laufzeit dynamisch zu inspizieren und Einblicke in die Zusammensetzung und alle öffentlichen Mitglieder der Klasse PdfDocument der IronPDF-Bibliothek zu erhalten.

Ausgang:

C# Reflexion (Wie es für Entwickler funktioniert): Abbildung 4

Schlussfolgerung

C# Reflection ist ein leistungsfähiger Mechanismus, der es Entwicklern ermöglicht, die Struktur von Typen zur Laufzeit dynamisch zu untersuchen und zu manipulieren.

In diesem Artikel wurden die wichtigsten Konzepte, Anwendungsfälle und Best Practices im Zusammenhang mit C#-Reflection untersucht und ihre Bedeutung für die Erstellung flexibler und erweiterbarer Anwendungen hervorgehoben.

Die Integration von IronPDF, einer robusten Bibliothek zur PDF-Manipulation, demonstriert die Vielseitigkeit von C# Reflection bei der dynamischen Beschaffung von Informationen über den Typ PdfDocument.

Wenn Entwickler diese Funktionen nutzen, erhalten sie die Flexibilität, ihre Anwendungen an sich ändernde Anforderungen und Szenarien anzupassen, was die dynamische Natur von C# und die wertvollen Beiträge von Bibliotheken wie IronPDF zur Verbesserung der Dokumentenverarbeitungsfunktionen unterstreicht.

IronPDF ist eine gut dokumentierte Bibliothek mit vielen Tutorials zur Verwendung von IronPDF. Um die Tutorials zu sehen, besuchen Sie hierdies bietet Entwicklern eine bessere Möglichkeit, sich mit den Funktionen vertraut zu machen.

< PREVIOUS
NPlot C# (Wie es für Entwickler funktioniert)
NÄCHSTES >
Npgsql C# .NET (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >