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");
In der C#-Programmierung ist das Verständnis von Delegates von größter Bedeutung für das Schreiben von flexiblem und erweiterbarem Code. Delegates dienen als leistungsfähige Entitäten, die die Implementierung von Rückrufen, Ereignisbehandlung und funktionalen Programmierparadigmen innerhalb der Sprache erleichtern. Microsofts Leitfaden für Delegierte bietet einen umfassenden Überblick über Delegate-Instanzen, die in C#-Anwendungen verwendet werden.
In diesem umfassenden Leitfaden werden wir tief in die Komplexität von C#-Delegates eindringen, ihre Funktionalität und Anwendungsfälle untersuchen und zeigen, wie sie es Entwicklern ermöglichen, modulareren und skalierbaren Code zu schreiben.
C# Delegates verstehen: Das Rückgrat der Rückrufe
Im Kern ist ein Delegat in C# ein typsicheres Objekt, das auch als Funktionszeiger bezeichnet wird und eine Methode oder mehrere Methoden kapselt. Delegate ermöglichen die Erstellung von Verweisen auf Funktionen und bieten die Möglichkeit, Methoden als Parameter zu übergeben, sie in Datenstrukturen zu speichern und sie dynamisch aufzurufen. Dies macht Delegates zu einem Eckpfeiler für die Realisierung von Callback-Mechanismen und die Implementierung ereignisgesteuerter Architekturen.
Hauptmerkmale von C#-Delegaten
Typensicherheit: Delegierte sind typensicher und gewährleisten, dass die Signatur der Methode, auf die sie verweisen, mit der Signatur des Delegaten übereinstimmt.
Multicast: Delegate unterstützen Multicast-Aufrufe, so dass mehrere Methoden in einer einzigen Delegate-Instanz zusammengefasst werden können. Beim Aufruf werden alle Methoden im Multicast-Delegat nacheinander aufgerufen.
Anonyme Methoden und Lambda-Ausdrücke: C#-Delegierte lassen sich nahtlos in anonyme Methoden und Lambda-Ausdrücke integrieren und bieten eine prägnante Syntax für die Definition von Methodenkörpern inline.
Grundlegende Verwendung und Syntax
Die grundlegenden Schritte zur Verwendung von Delegaten umfassen die Deklaration mit Delegattyp und Parametern, die Instanziierung und den Aufruf durch die Definition von Callback-Methoden. Hier ist ein einfaches Beispiel:
// Delegate declaration
public delegate void MyDelegate(string message);
// Instantiation
MyDelegate myDelegate = DisplayMessage;
// Method to be referenced
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
// Invocation
myDelegate("Hello, Delegates!");
// Delegate declaration
public delegate void MyDelegate(string message);
// Instantiation
MyDelegate myDelegate = DisplayMessage;
// Method to be referenced
static void DisplayMessage(string message)
{
Console.WriteLine(message);
}
// Invocation
myDelegate("Hello, Delegates!");
' Delegate declaration
Public Delegate Sub MyDelegate(ByVal message As String)
' Instantiation
Private myDelegate As MyDelegate = AddressOf DisplayMessage
' Method to be referenced
Shared Sub DisplayMessage(ByVal message As String)
Console.WriteLine(message)
End Sub
' Invocation
myDelegate("Hello, Delegates!")
Rückruf-Szenarien: Nutzung von Delegierten für mehr Flexibilität
Einer der wichtigsten Anwendungsfälle für Delegierte ist die Implementierung von Rückrufen. Denken Sie an Szenarien, in denen eine Methode eine externe Komponente benachrichtigen muss, wenn ein bestimmtes Ereignis eintritt. Die Delegierten bieten eine saubere und modulare Lösung:
class Program
{
static void Main(string [] args)
{
public class EventPublisher
{
// Declare a delegate
public delegate void EventHandler(string eventName);
// Create an instance of the delegate
public EventHandler EventOccurred;
// Simulate an event
public void SimulateEvent(string eventName)
{
// Invoke the delegate to notify subscribers
EventOccurred?.Invoke(eventName);
}
}
public class EventSubscriber
{
public EventSubscriber(EventPublisher eventPublisher)
{
// Subscribe to the event using the delegate
eventPublisher.EventOccurred += HandleEvent;
}
// Method to be invoked when the event occurs
private void HandleEvent(string eventName)
{
Console.WriteLine($"Event handled: {eventName}");
}
}
}
}
class Program
{
static void Main(string [] args)
{
public class EventPublisher
{
// Declare a delegate
public delegate void EventHandler(string eventName);
// Create an instance of the delegate
public EventHandler EventOccurred;
// Simulate an event
public void SimulateEvent(string eventName)
{
// Invoke the delegate to notify subscribers
EventOccurred?.Invoke(eventName);
}
}
public class EventSubscriber
{
public EventSubscriber(EventPublisher eventPublisher)
{
// Subscribe to the event using the delegate
eventPublisher.EventOccurred += HandleEvent;
}
// Method to be invoked when the event occurs
private void HandleEvent(string eventName)
{
Console.WriteLine($"Event handled: {eventName}");
}
}
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public class EventPublisher
' {
' ' Declare a delegate
' public delegate void EventHandler(string eventName);
' ' Create an instance of the delegate
' public EventHandler EventOccurred;
' ' Simulate an event
' public void SimulateEvent(string eventName)
' {
' ' Invoke the delegate to notify subscribers
' if (EventOccurred != Nothing)
' EventOccurred.Invoke(eventName);
' }
' }
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' public class EventSubscriber
' {
' public EventSubscriber(EventPublisher eventPublisher)
' {
' ' Subscribe to the event using the delegate
' eventPublisher.EventOccurred += HandleEvent;
' }
' ' Method to be invoked when the event occurs
' private void HandleEvent(string eventName)
' {
' Console.WriteLine(string.Format("Event handled: {0}", eventName));
' }
' }
End Sub
End Class
Funktionale Programmierung mit Delegaten
Delegates spielen eine entscheidende Rolle bei der Einführung von funktionalen Programmierkonzepten in C#. Durch die Verwendung von Delegaten mit Funktionen höherer Ordnung können Entwickler Funktionen als Argumente übergeben, Funktionen zurückgeben und aussagekräftigeren und präziseren Code erstellen:
public delegate int MyDelegate(int x, int y);
public class Calculator
{
public int PerformOperation(MyDelegate operation, int operand1, int operand2)
{
return operation(operand1, operand2);
}
}
// Usage
var calculator = new Calculator();
int result = calculator.PerformOperation((x, y) => x + y, 5, 3); // Adds 5 and 3
public delegate int MyDelegate(int x, int y);
public class Calculator
{
public int PerformOperation(MyDelegate operation, int operand1, int operand2)
{
return operation(operand1, operand2);
}
}
// Usage
var calculator = new Calculator();
int result = calculator.PerformOperation((x, y) => x + y, 5, 3); // Adds 5 and 3
Public Delegate Function MyDelegate(ByVal x As Integer, ByVal y As Integer) As Integer
Public Class Calculator
Public Function PerformOperation(ByVal operation As MyDelegate, ByVal operand1 As Integer, ByVal operand2 As Integer) As Integer
Return operation(operand1, operand2)
End Function
End Class
' Usage
Private calculator = New Calculator()
Private result As Integer = calculator.PerformOperation(Function(x, y) x + y, 5, 3) ' Adds 5 and 3
Einführung in IronPDF: Ein kurzer Überblick
Erfahren Sie mehr über die Funktionen von IronPDF ist eine funktionsreiche Bibliothek zur Erleichterung der PDF-Erzeugung, -Bearbeitung und -Interaktion in C#-Anwendungen. Egal, ob Sie PDFs von Grund auf neu erstellen, HTML in PDF konvertieren oder Inhalte aus vorhandenen PDFs extrahieren müssen, IronPDF bietet eine umfassende Reihe von Werkzeugen zur Rationalisierung dieser Aufgaben. Seine Vielseitigkeit macht ihn zu einem wertvollen Werkzeug für Entwickler, die an einer Vielzahl von Projekten arbeiten.
Installation von IronPDF: Ein Schnellstart
Um die IronPDF-Bibliothek in Ihrem C#-Projekt zu nutzen, können Sie einfach das IronPDF-NuGet-Paket installieren. Verwenden Sie den folgenden Befehl in Ihrer Paketmanager-Konsole:
Install-Package IronPdf
Alternativ können Sie im NuGet Package Manager nach "IronPDF" suchen und es von dort aus installieren.
Delegaten in C#: Eine kurze Zusammenfassung
In C# dienen Delegates als typsichere Funktionszeiger, mit denen Methoden referenziert und als Parameter übergeben werden können. Wie bereits erwähnt, spielen die Delegierten in verschiedenen Szenarien eine entscheidende Rolle. Nun stellt sich die Frage: Wie passen C#-Delegierte in die Umgebung von IronPDF, und können sie effektiv im Tandem eingesetzt werden?
Integration von Delegierten in IronPDF
1. Rückrufmethoden für Dokumentereignisse verwenden
Eine Möglichkeit, Delegierte mit IronPDF zu nutzen, sind Rückrufe für Dokumentereignisse. IronPDF bietet Ereignisse, die Sie mit Hilfe von Delegaten abonnieren können, so dass Sie zu bestimmten Zeitpunkten während der Dokumentenerstellung benutzerdefinierte Logik ausführen können. Zum Beispiel:
string AddPassword(PdfDocument document)
{
string password = "";
if (document.Password == "")
{
password = "Iron123";
}
return password;
}
PdfDocument document = new PdfDocument("StyledDocument.pdf");
AddPasswordEventHandler handler = AddPassword;
document.Password = handler.Invoke(document); // Subscribe to the event
document.SaveAs("PasswordProtected.pdf");
public delegate string AddPasswordEventHandler(PdfDocument e);
string AddPassword(PdfDocument document)
{
string password = "";
if (document.Password == "")
{
password = "Iron123";
}
return password;
}
PdfDocument document = new PdfDocument("StyledDocument.pdf");
AddPasswordEventHandler handler = AddPassword;
document.Password = handler.Invoke(document); // Subscribe to the event
document.SaveAs("PasswordProtected.pdf");
public delegate string AddPasswordEventHandler(PdfDocument e);
Private Function AddPassword(ByVal document As PdfDocument) As String
Dim password As String = ""
If document.Password = "" Then
password = "Iron123"
End If
Return password
End Function
Private document As New PdfDocument("StyledDocument.pdf")
Private handler As AddPasswordEventHandler = AddressOf AddPassword
document.Password = handler.Invoke(document) ' Subscribe to the event
document.SaveAs("PasswordProtected.pdf")
public delegate String AddPasswordEventHandler(PdfDocument e)
In diesem C#-Codeausschnitt wird eine Methode namens AddPassword definiert, die ein PdfDocument als Parameter akzeptiert und einen String zurückgibt. In dieser Methode wird eine String-Variable namens "password" initialisiert und eine bedingte Prüfung der Eigenschaft "password" des bereitgestellten "pdfDocuments" durchgeführt. Wenn das Kennwort eine leere Zeichenkette ist, weisen Sie der Variablen Passwort den Wert "Iron123" zu und geben ihn zurück.
Als nächstes wird eine Instanz von PdfDocument mit dem Dateinamen "StyledDocument.pdf" erstellt. Ein Delegat mit dem Namen AddPasswordEventHandler wird mit der gleichen Signatur wie die Methode AddPassword deklariert. Einer Instanz dieses Delegaten mit dem Namen "Handler" wird die Methode "AddPassword" zugewiesen. Der Delegat wird dann mit der Methode "Invoke" aufgerufen, wobei die Instanz "document" übergeben wird, und das zurückgegebene Kennwort wird der Eigenschaft "Password" des "document" zugewiesen.
Zum Schluss wird die Methode "SaveAs" für das Dokument aufgerufen und es als "PasswordProtected.pdf" gespeichert. Der Code verwendet einen Delegaten, um dynamisch ein Kennwort für ein "PdfDocument" auf der Grundlage bestimmter Bedingungen in der Methode "AddPassword" zu bestimmen und festzulegen.
2. Verwendung von Delegaten für dynamische Inhalte
Delegierte können auch verwendet werden, um dynamische Inhalte in das PDF-Dokument einzufügen. IronPDF unterstützt das Einfügen von HTML-Inhalten inPDFs aus HTML generierenund Entwickler können Delegaten verwenden, um dynamisch HTML auf der Grundlage bestimmter Bedingungen oder Daten zu erzeugen:
// Assuming GetDynamicContent is a delegate that generates dynamic HTML content
Func<string> getDynamicContent = () =>
{
// Custom logic to generate dynamic content
return "<p>This is dynamic content based on some condition.</p>";
};
// Incorporate dynamic HTML into the PDF
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf($"<html><body>{getDynamicContent()}</body></html>").SaveAs("DynamicContentDocument.pdf");
// Assuming GetDynamicContent is a delegate that generates dynamic HTML content
Func<string> getDynamicContent = () =>
{
// Custom logic to generate dynamic content
return "<p>This is dynamic content based on some condition.</p>";
};
// Incorporate dynamic HTML into the PDF
var pdfDocument = new ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf($"<html><body>{getDynamicContent()}</body></html>").SaveAs("DynamicContentDocument.pdf");
' Assuming GetDynamicContent is a delegate that generates dynamic HTML content
Dim getDynamicContent As Func(Of String) = Function()
' Custom logic to generate dynamic content
Return "<p>This is dynamic content based on some condition.</p>"
End Function
' Incorporate dynamic HTML into the PDF
Dim pdfDocument = New ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf($"<html><body>{getDynamicContent()}</body></html>").SaveAs("DynamicContentDocument.pdf")
In diesem Beispiel erzeugt der Delegat getDynamicContent dynamisch HTML-Inhalte, die dann in das PDF-Dokument eingebettet werden.
Um IronPDF effizient und effektiv nutzen zu können, besuchen Sie bitte dieIronPDF-Dokumentation.
Schlussfolgerung
Zusammenfassend lässt sich sagen, dass C#-Delegates ein Eckpfeiler für die Flexibilität und Modularität von Code sind. Sie ermöglichen es Entwicklern, Rückrufe zu implementieren, Ereignisse zu verarbeiten und funktionale Programmierparadigmen wie die Möglichkeit, Methodenaufrufe programmatisch zu ändern, zu übernehmen. Als vielseitiges Werkzeug im C#-Toolkit ermöglichen Delegates Entwicklern die Erstellung von besser wartbarem, skalierbarem und ausdrucksstarkem Code. Ob Sie ereignisgesteuerte Anwendungen erstellen, Callback-Mechanismen implementieren oder die funktionale Programmierung erforschen, C#-Delegates sind ein mächtiger Verbündeter auf Ihrer Programmierreise.
C#-Delegierte und IronPDF können ein kooperatives Duo bilden, das die Möglichkeiten der Dokumentenerstellung in Ihren Anwendungen erweitert. Ganz gleich, ob Sie Dokumentereignisse anpassen oder dynamische Inhalte einfügen möchten, Delegates bieten einen flexiblen Mechanismus zur Erweiterung der Funktionalität von IronPDF. Während Sie die Möglichkeiten erkunden, sollten Sie die spezifischen Anforderungen Ihres Projekts berücksichtigen und überlegen, wie die Delegierten zu einem maßgeschneiderten und dynamischen PDF-Erstellungsprozess mit IronPDF beitragen können.
Bevor er Software-Ingenieur wurde, promovierte Kannapat an der Universität Hokkaido in Japan im Bereich Umweltressourcen. Während seines Studiums wurde Kannapat auch Mitglied des Vehicle Robotics Laboratory, das Teil der Abteilung für Bioproduktionstechnik ist. Im Jahr 2022 wechselte er mit seinen C#-Kenntnissen zum Engineering-Team von Iron Software, wo er sich auf IronPDF konzentriert. Kannapat schätzt an seiner Arbeit, dass er direkt von dem Entwickler lernt, der den Großteil des in IronPDF verwendeten Codes schreibt. Neben dem kollegialen Lernen genießt Kannapat auch den sozialen Aspekt der Arbeit bei Iron Software. Wenn er nicht gerade Code oder Dokumentationen schreibt, kann man Kannapat normalerweise beim Spielen auf seiner PS5 oder beim Wiedersehen mit The Last of Us antreffen.
< PREVIOUS C#-Attribute (Wie es für Entwickler funktioniert)
NÄCHSTES > C# Ternärer Operator (Wie er für Entwickler funktioniert)