using IronPdf;
// Disable local disk access or cross-origin requests
Installation.EnableWebSecurity = true;
// Instantiate Renderer
var renderer = new ChromePdfRenderer();
// Create a PDF from a HTML string using C#
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
// Export to a file or Stream
pdf.SaveAs("output.pdf");
// Advanced Example with HTML Assets
// Load external html assets: Images, CSS and JavaScript.
// An optional BasePath 'C:\site\assets\' is set as the file location to load assets from
var myAdvancedPdf = renderer.RenderHtmlAsPdf("<img src='icons/iron.png'>", @"C:\site\assets\");
myAdvancedPdf.SaveAs("html-with-assets.pdf");
C# Reflection (Wie es für Entwickler funktioniert)
Chipego Kalinda
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. Reflection in C# ermöglicht es Entwicklern, die Metadaten von Typen zur Laufzeit zu inspizieren und mit ihnen zu interagieren. Diese Fähigkeit eröffnet eine neue Dimension von Möglichkeiten und erlaubt es Entwicklern, 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 werden auch die Reflexionsinformationen des PdfDocument-Objekts von IronPDF finden.
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-Namespace erreicht, der Klassen und Methoden zum Interagieren mit Metadaten, zum Abrufen von Informationen über Typen und sogar zum dynamischen Erstellen von Instanzen bereitstellt.
Schlüsselkomponenten der Reflexion
Typ Klasse
Im Kern der C#-Reflexion steht die Type-Klasse, die einen Typ zur Laufzeit in der .NET-Umgebung repräsentiert. 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 gegebenen Typ mit verschiedenen Methoden erhalten, wie zum Beispiel dem typeof()-Operator oder indem Sie die GetType()-Methode auf einem Objekt aufrufen.
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
$vbLabelText $csharpLabel
Ausgabe
Montageklasse
Eine Assembly ist in .NET eine Einheit für die Bereitstellung und Versionierung. Die Assembly-Klasse im System.Reflection-Namespace stellt Methoden zum Laden und Beschreiben von Assemblies sowie zur dynamischen Inspektion von Assembly-Informationen bereit.
Sie können ein Assembly-Objekt für jede Instanz des aktuell ausgeführten Assemblys oder für jedes 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
$vbLabelText $csharpLabel
Ausgabe
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 auf Instanzen dieser Klassen über die Type-Klasse zugreifen.
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
$vbLabelText $csharpLabel
Ausgabe
Einführung in IronPDF
IronPDF - Offizielle Website ist eine leistungsstarke C#-Bibliothek, die einen umfassenden Satz von 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
PDF-Erstellung: Erstellen Sie mühelos PDF-Dokumente von Grund auf oder konvertieren Sie HTML, Bilder und andere Formate in PDF.
PDF-Bearbeitung: Bearbeiten Sie vorhandene PDFs, indem Sie Text, Bilder und Anmerkungen hinzufügen, entfernen oder ändern.
PDF-Extraktion: Extrahieren Sie Text, Bilder und Metadaten aus PDF-Dateien zur weiteren Verarbeitung.
HTML zu PDF-Umwandlung: Konvertieren Sie HTML-Inhalte, einschließlich CSS und JavaScript, in hochwertige PDFs.
PDF-Formulare: Erstellen und füllen Sie interaktive PDF-Formulare programmatisch aus.
Sicherheit: Verschlüsselung und Passwortschutz anwenden, um PDF-Dokumente zu sichern.
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
Install-Package IronPdf
SHELL
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
$vbLabelText $csharpLabel
Der bereitgestellte C#-Code nutzt Reflection, um Informationen über den PdfDocument-Typ aus der IronPDF-Bibliothek zu erhalten. Zunächst wird der Ausdruck typeof(PdfDocument) verwendet, um das Type-Objekt abzurufen, das den PdfDocument-Typ repräsentiert.
Anschließend werden verschiedene Eigenschaften des erhaltenen Type-Objekts auf die Konsole gedruckt, einschließlich des Typnamens, des vollqualifizierten Namens und des assembly-qualifizierten Namens.
Zusätzlich nutzt der Code eine foreach-Schleife, um durch die Mitglieder des PdfDocument-Typs zu iterieren und Informationen über jedes Mitglied auszugeben, wie beispielsweise den Mitgliedstyp und den Namen.
Dieser Ansatz zeigt die Verwendung von Reflection, um während der Laufzeit dynamisch die Struktur und Metadaten von Objekten des Typs PdfDocument zu inspizieren, und bietet Einblicke in die Zusammensetzung und alle öffentlichen Mitglieder der PdfDocument-Klasse der IronPDF-Bibliothek.
Ausgabe:
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.
Zusätzlich zeigt die Integration von IronPDF, einer leistungsstarken PDF-Manipulationsbibliothek, weiter die Vielseitigkeit der C#-Reflexion bei der dynamischen Informationsgewinnung über den PdfDocument-Typ.
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. To see the tutorials, visit IronPDF Tutorial Documentation, which provides a greater opportunity for developers to learn about its features.
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS NPlot C# (Wie es für Entwickler funktioniert)
NÄCHSTES > Npgsql C# .NET (Wie es für Entwickler funktioniert)