.NET-HILFE

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

Veröffentlicht 18. Februar 2024
Teilen Sie:

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

  1. Typensicherheit: Delegierte sind typensicher und gewährleisten, dass die Signatur der Methode, auf die sie verweisen, mit der Signatur des Delegaten übereinstimmt.

  2. 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.

  3. 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!")
VB   C#

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
VB   C#

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
VB   C#

Einführung in IronPDF: Ein kurzer Überblick

C# Delegierte(Wie es für Entwickler funktioniert): Abbildung 1 - IronPDF-Webseite

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.

C# Delegierte(So funktioniert es für Entwickler): Abbildung 2 - Installieren der IronPDF-Bibliothek über den NuGet Package Manager

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)
VB   C#

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")
VB   C#

In diesem Beispiel erzeugt der Delegat getDynamicContent dynamisch HTML-Inhalte, die dann in das PDF-Dokument eingebettet werden.

C# Delegierte(Wie es für Entwickler funktioniert): Abbildung 3 - Ausgegebene PDF-Datei aus dem vorherigen Code

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.

IronPDF bietet einekostenlos testen um seine vollständige Funktionalität zu testen. Sie kann seinfür die kommerzielle Nutzung lizenziert ausgehend von $749.

< PREVIOUS
C#-Attribute (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# Ternärer Operator (Wie er für Entwickler funktioniert)

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

Gratis NuGet-Download Downloads insgesamt: 11,810,873 Lizenzen anzeigen >