.NET-HILFE

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

Veröffentlicht 15. August 2024
Teilen Sie:

Erweiterungsmethoden sind eine leistungsstarke Funktion in C#, mit der Sie bestehenden Typen neue Funktionen hinzufügen können, ohne ihren Quellcode zu ändern. Sie können sehr nützlich sein, um Ihren Code lesbarer und wartbarer zu machen. In diesem Leitfaden werden wir die Grundlagen der Erweiterungsmethoden und ihre Implementierung erkunden.

Was sind Erweiterungsmethoden?

Erweiterungsmethoden sind spezielle statische Methoden, die so aufgerufen werden können, als wären sie Instanzmethoden eines bestehenden Typs. Sie sind eine bequeme Möglichkeit, neue Methoden zu einer bestehenden Klasse hinzuzufügen, ohne den ursprünglichen Quellcode zu ändern oder von der Klasse zu erben.

Um eine Erweiterungsmethode zu erstellen, müssen Sie eine statische Methode innerhalb einer statischen Klasse definieren. Der erste Parameter der Methode sollte der Typ sein, den Sie erweitern wollen, mit diesem Schlüsselwort vorangestellt. Dieses spezielle Schlüsselwort teilt dem C#-Compiler mit, dass es sich um eine Erweiterungsmethode handelt.

Implementierung von Erweiterungsmethoden in C#;

Da wir nun wissen, was Erweiterungsmethoden sind, sollten wir eine implementieren. Stellen Sie sich vor, Sie haben eine Zeichenkette, die Sie umkehren wollen. Anstatt dafür eine eigene Funktion zu schreiben, können Sie eine Erweiterungsmethode für die String-Klasse erstellen.

Erstellen wir zunächst eine neue statische Klasse namens StringExtensions. Der Klassenname ist nicht wichtig, aber es ist eine übliche Konvention, den Namen des Typs, der erweitert wird, gefolgt von "Extensions" zu verwenden. Innerhalb dieser Klasse definieren wir eine statische Methode namens Reverse:

public static class StringExtensions
{
   public static string Reverse(this string input)
   {
       char [] chars = input.ToCharArray();
       Array.Reverse(chars);
       return new string(chars);
   }
}
public static class StringExtensions
{
   public static string Reverse(this string input)
   {
       char [] chars = input.ToCharArray();
       Array.Reverse(chars);
       return new string(chars);
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

In diesem Beispiel haben wir eine öffentliche statische String-Methode namens Reverse mit einem einzigen Parameter erstellt. Das Schlüsselwort this vor dem String-Typ zeigt an, dass es sich um eine Erweiterungsmethode für die String-Klasse handelt.

Sehen wir uns nun an, wie wir diese neue Erweiterungsmethode in unserer Klasse Program verwenden können:

class Program
{
   static void Main(string [] args)
   {
       string example = "Hello, World!";
       string reversed = example.Reverse();
       Console.WriteLine(reversed); // !dlroW ,olleH
   }
}
class Program
{
   static void Main(string [] args)
   {
       string example = "Hello, World!";
       string reversed = example.Reverse();
       Console.WriteLine(reversed); // !dlroW ,olleH
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Beachten Sie, dass wir keine Instanz der Klasse StringExtensions erstellen mussten. Stattdessen haben wir die Reverse-Methode direkt auf die String-Instanz angewendet, als wäre es eine Instanzmethode.

Syntax der Erweiterungsmethode

Erweiterungsmethoden sehen aus und verhalten sich wie Instanzmethoden, aber es gibt einige wichtige Unterschiede, die Sie beachten sollten:

  • Erweiterungsmethoden können nicht auf private Mitglieder des erweiterten Typs zugreifen
  • Sie nehmen auch nicht an der Vererbung oder Polymorphie teil
  • Sie können eine bestehende Methode nicht mit einer Erweiterungsmethode überschreiben

    Wenn der erweiterte Typ eine Methode mit der gleichen Signatur wie eine Erweiterungsmethode hat, hat die Instanzmethode immer Vorrang. Erweiterungsmethoden werden nur aufgerufen, wenn es keine passende Instanzmethode gibt.

Beispiele aus der Praxis für Erweiterungsmethoden

Nachdem wir nun die Grundlagen der Erweiterungsmethoden in C# verstanden haben, wollen wir uns einige Beispiele aus der Praxis ansehen.

String-Erweiterung Methode Wortanzahl

Stellen Sie sich vor, Sie wollen die Anzahl der Wörter in einer Zeichenkette zählen. Sie können eine WordCount-Erweiterungsmethode für die String-Klasse erstellen:

public static class StringExtensions
{
   public static int WordCount(this string input)
   {
       return input.Split(new [] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Length;
   }
}
public static class StringExtensions
{
   public static int WordCount(this string input)
   {
       return input.Split(new [] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Length;
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Jetzt können Sie ganz einfach die Anzahl der Wörter in einer Zeichenkette wie dieser zählen:

string text = "Extension methods are awesome!";
int wordCount = text.WordCount();
Console.WriteLine($"The text has {wordCount} words."); // The text has 4 words.
string text = "Extension methods are awesome!";
int wordCount = text.WordCount();
Console.WriteLine($"The text has {wordCount} words."); // The text has 4 words.
Dim text As String = "Extension methods are awesome!"
Dim wordCount As Integer = text.WordCount()
Console.WriteLine($"The text has {wordCount} words.") ' The text has 4 words.
VB   C#

IEnumerable Erweiterung Methode Median

Angenommen, Sie haben eine Sammlung von Zahlen und möchten den Medianwert berechnen. Sie können eine Erweiterungsmethode für IEnumerable erstellen:

public static class EnumerableExtensions
{
   public static double Median(this IEnumerable source)
   {
       int [] sorted = source.OrderBy(x => x).ToArray();
       int count = sorted.Length;

       if (count == 0)
       {
           throw new InvalidOperationException("The collection is empty.");
       }

       if (count % 2 == 0)
       {
           return (sorted [count / 2 - 1] + sorted [count / 2]) / 2.0;
       }
       else
       {
           return sorted [count / 2];
       }
   }
}
public static class EnumerableExtensions
{
   public static double Median(this IEnumerable source)
   {
       int [] sorted = source.OrderBy(x => x).ToArray();
       int count = sorted.Length;

       if (count == 0)
       {
           throw new InvalidOperationException("The collection is empty.");
       }

       if (count % 2 == 0)
       {
           return (sorted [count / 2 - 1] + sorted [count / 2]) / 2.0;
       }
       else
       {
           return sorted [count / 2];
       }
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Mit dieser Erweiterungsmethode können Sie den Medianwert einer Sammlung leicht ermitteln:

int [] numbers = { 5, 3, 9, 1, 4 };
double median = numbers.Median();
Console.WriteLine($"The median value is {median}."); // The median value is 4.
int [] numbers = { 5, 3, 9, 1, 4 };
double median = numbers.Median();
Console.WriteLine($"The median value is {median}."); // The median value is 4.
Dim numbers() As Integer = { 5, 3, 9, 1, 4 }
Dim median As Double = numbers.Median()
Console.WriteLine($"The median value is {median}.") ' The median value is 4.
VB   C#

DateTime Extension Methode StartOfWeek

Nehmen wir an, Sie möchten den Wochenanfang für ein bestimmtes Datum ermitteln. Sie können eine Erweiterungsmethode für die DateTime-Struktur erstellen:

public static class DateTimeExtensions
{
   public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek = DayOfWeek.Monday)
   {
       int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
       return dt.AddDays(-1 * diff).Date;
   }
}
public static class DateTimeExtensions
{
   public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek = DayOfWeek.Monday)
   {
       int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
       return dt.AddDays(-1 * diff).Date;
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Jetzt können Sie den Wochenanfang für jedes beliebige Datum leicht finden:

DateTime today = DateTime.Today;
DateTime startOfWeek = today.StartOfWeek();
Console.WriteLine($"The start of the week is {startOfWeek.ToShortDateString()}."); // The start of the week is 17/06/2024.
DateTime today = DateTime.Today;
DateTime startOfWeek = today.StartOfWeek();
Console.WriteLine($"The start of the week is {startOfWeek.ToShortDateString()}."); // The start of the week is 17/06/2024.
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Erzeugen von PDFs mit IronPDF und Erweiterungsmethoden

In diesem Abschnitt stellen wir Ihnen IronPDF vor, unsere branchenführende Bibliothek für die Erzeugung von und Arbeit mit PDF-Dateien in C#. Wir werden auch sehen, wie wir Erweiterungsmethoden nutzen können, um eine nahtlose und intuitive Erfahrung bei der Arbeit mit dieser Bibliothek zu schaffen.

IronPDF konvertiert HTML in PDF so, dass das Layout und der Stil des Inhalts so erhalten bleiben, wie er in einem Webbrowser erscheinen würde. Die Bibliothek kann mit Roh-HTML aus Dateien, URLs und Strings arbeiten. Hier ist ein kurzer Überblick:

using IronPdf;

class Program
{
   static void Main(string [] args)
   {
       var renderer = new ChromePdfRenderer();

       // 1. Convert HTML String to PDF
       var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
       var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
       pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

       // 2. Convert HTML File to PDF
       var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
       var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
       pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

       // 3. Convert URL to PDF
       var url = "http://ironpdf.com"; // Specify the URL
       var pdfFromUrl = renderer.RenderUrlAsPdf(url);
       pdfFromUrl.SaveAs("URLToPDF.pdf");
   }
}
using IronPdf;

class Program
{
   static void Main(string [] args)
   {
       var renderer = new ChromePdfRenderer();

       // 1. Convert HTML String to PDF
       var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
       var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
       pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

       // 2. Convert HTML File to PDF
       var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
       var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
       pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

       // 3. Convert URL to PDF
       var url = "http://ironpdf.com"; // Specify the URL
       var pdfFromUrl = renderer.RenderUrlAsPdf(url);
       pdfFromUrl.SaveAs("URLToPDF.pdf");
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Erstellen einer einfachen PDF-Datei

Bevor wir uns mit den Erweiterungsmethoden beschäftigen, sehen wir uns an, wie man mit IronPDF eine einfache PDF-Datei aus HTML erstellt:

using IronPdf;

class Program
{
   static void Main(string [] args)
   {
       var renderer = new ChromePdfRenderer();;
       var PDF = renderer.RenderHtmlAsPdf("Hello, World!");
       PDF.SaveAs("HelloWorld.PDF");
   }
}
using IronPdf;

class Program
{
   static void Main(string [] args)
   {
       var renderer = new ChromePdfRenderer();;
       var PDF = renderer.RenderHtmlAsPdf("Hello, World!");
       PDF.SaveAs("HelloWorld.PDF");
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Dieses Codeschnipsel erstellt eine PDF-Datei mit dem Text "Hello, World!"und speichert es in einer Datei mit dem Namen "HelloWorld.PDF".

Erweiterungsmethoden für IronPDF

Nun wollen wir uns ansehen, wie wir mit Hilfe von Erweiterungsmethoden die Funktionalität von IronPDF erweitern und die Arbeit damit erleichtern können. Wir können zum Beispiel eine Erweiterungsmethode erstellen, die eine Instanz der String-Klasse nimmt und daraus direkt ein PDF erzeugt.

public static class StringExtensions
{
   public static void SaveAsPdf(this string htmlContent, string filePath)
   {
       var renderer = new ChromePdfRenderer();;
       var PDF = renderer.RenderHtmlAsPdf(htmlContent);
       PDF.SaveAs(filePath);
   }
}
public static class StringExtensions
{
   public static void SaveAsPdf(this string htmlContent, string filePath)
   {
       var renderer = new ChromePdfRenderer();;
       var PDF = renderer.RenderHtmlAsPdf(htmlContent);
       PDF.SaveAs(filePath);
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Mit dieser Erweiterungsmethode können wir nun ein PDF direkt aus einer Zeichenkette erzeugen:

string html = "Extension Methods and IronPDFGenerating PDFs has never been easier!";
html.SaveAsPdf("ExtensionMethodsAndIronPDF.PDF");
string html = "Extension Methods and IronPDFGenerating PDFs has never been easier!";
html.SaveAsPdf("ExtensionMethodsAndIronPDF.PDF");
Dim html As String = "Extension Methods and IronPDFGenerating PDFs has never been easier!"
html.SaveAsPdf("ExtensionMethodsAndIronPDF.PDF")
VB   C#

Erzeugen von PDFs aus URLs

Eine weitere nützliche Erweiterungsmethode, die wir erstellen können, ist eine, die ein PDF aus einer URL generiert. Um dies zu erreichen, können wir die Klasse Uri erweitern:

public static class UriExtensions
{
   public static void SaveAsPdf(this Uri url, string filePath)
   {
       var renderer = new ChromePdfRenderer();;
       var PDF = renderer.RenderUrlAsPdf(url.AbsoluteUri);
       PDF.SaveAs(filePath);
   }
}
public static class UriExtensions
{
   public static void SaveAsPdf(this Uri url, string filePath)
   {
       var renderer = new ChromePdfRenderer();;
       var PDF = renderer.RenderUrlAsPdf(url.AbsoluteUri);
       PDF.SaveAs(filePath);
   }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Jetzt können wir ganz einfach eine PDF-Datei aus einer URL wie dieser erzeugen:

Uri url = new Uri("https://www.ironpdf.com/");
url.SaveAsPdf("UrlToPdf.PDF");
Uri url = new Uri("https://www.ironpdf.com/");
url.SaveAsPdf("UrlToPdf.PDF");
Dim url As New Uri("https://www.ironpdf.com/")
url.SaveAsPdf("UrlToPdf.PDF")
VB   C#

Schlussfolgerung

Und voilà - wir haben das Konzept der Erweiterungsmethoden in C# erkundet, gelernt, wie man sie mit statischen Methoden und statischen Klassen implementiert, und reale Beispiele für verschiedene Typen verwendet. Darüber hinaus haben wir IronPDF vorgestellt, eine Bibliothek zur Erzeugung von und Arbeit mit PDF-Dateien in C#. Wenn Sie beginnen, Erweiterungsmethoden und IronPDF zusammen zu verwenden, werden Sie sehen, wie viel sauberer, lesbarer und effizienter Ihr Code werden kann.

Sind Sie bereit, IronPDF in die Hand zu nehmen? Sie können mit unserem 30 Tage kostenloser Test. Außerdem ist die Nutzung für Entwicklungszwecke völlig kostenlos, so dass Sie wirklich sehen können, was in ihm steckt. Und wenn Ihnen gefällt, was Sie sehen, beginnt IronPDF bereits ab einem Preis von $749. Noch größere Einsparungen können Sie mit dem Iron Suite wo Sie alle neun Iron Software Tools zum Preis von zwei erhalten. Fröhliches Kodieren!

< PREVIOUS
Try/Catch in C# (Wie es für Entwickler funktioniert)
NÄCHSTES >
C# verwenden (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 >