IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

Metody rozszerzeń w języku C# (jak to działa dla programistów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

Metody rozszerzeń to potężna funkcja w języku C#, która pozwala dodawać nowe funkcje do istniejących typów bez modyfikowania ich kodu źródłowego. Mogą one być niezwykle przydatne w zwiększaniu czytelności i łatwości utrzymania kodu. W tym przewodniku omówimy podstawy metod rozszerzeń oraz sposoby ich implementacji.

Czym są metody rozszerzeń?

Metody rozszerzeń to specjalne metody statyczne, które można wywoływać tak, jakby były metodami instancji istniejącego typu. Są one wygodnym sposobem na dodanie nowych metod do istniejącej klasy bez zmiany oryginalnego kodu źródłowego lub dziedziczenia z tej klasy.

Aby utworzyć metodę rozszerzenia, należy zdefiniować metodę statyczną wewnątrz klasy statycznej. Pierwszym parametrem metody powinien być typ, który chcesz rozszerzyć, poprzedzony słowem kluczowym this. To specjalne słowo kluczowe informuje kompilator C#, że jest to metoda rozszerzenia.

Implementing Extension Methods in C#

Skoro już wiemy, czym są metody rozszerzeń, zaimplementujmy jedną z nich. Wyobraź sobie, że masz ciąg znaków, który chcesz odwrócić. Zamiast pisać osobną funkcję do tego celu, możesz stworzyć metodę rozszerzenia dla klasy String.

Najpierw stwórzmy nową statyczną klasę o nazwie StringExtensions. Nazwa klasy nie ma znaczenia, ale powszechną konwencją jest użycie nazwy rozszerzanego typu, po której następuje słowo "Extensions". W tej klasie zdefiniujemy statyczną metodę o nazwie Reverse:

public static class StringExtensions
{
    // This extension method reverses a given string.
    public static string Reverse(this string input)
    {
        // Convert the string to a character array.
        char[] chars = input.ToCharArray();
        // Reverse the array in place.
        Array.Reverse(chars);
        // Create a new string from the reversed character array and return it.
        return new string(chars);
    }
}

W tym przykładzie stworzyliśmy publiczną statyczną metodę typu string nazwaną Reverse z jednym parametrem. Słowo kluczowe this przed typem string wskazuje, że jest to metoda rozszerzająca dla klasy string.

Teraz zobaczmy, jak użyć tej nowej metody rozszerzającej w naszej klasie Program:

class Program
{
    static void Main(string[] args)
    {
        string example = "Hello, World!";
        // Call the extension method as if it were an instance method.
        string reversed = example.Reverse();
        Console.WriteLine(reversed); // Output: !dlroW ,olleH
    }
}

Zauważ, że nie musieliśmy tworzyć instancji klasy StringExtensions. Zamiast tego użyliśmy metody Reverse bezpośrednio na instancji string, jakby była to metoda instancyjna.

Składnia metod rozszerzeń

Metody rozszerzeń wyglądają i działają jak metody instancji, ale należy pamiętać o kilku istotnych różnicach:

  • Metody rozszerzeń nie mają dostępu do elementów prywatnych typu rozszerzanego.
  • Nie uczestniczą one również w dziedziczeniu ani polimorfizmie.
  • Nie można nadpisać istniejącej metody metodą rozszerzenia.

Jeśli typ rozszerzony posiada metodę o tej samej sygnaturze co metoda rozszerzenia, metoda instancji zawsze ma pierwszeństwo. Metody rozszerzeń są wywoływane tylko wtedy, gdy nie ma pasującej metody instancji.

Praktyczne przykłady metod rozszerzeń

Teraz, gdy znamy już podstawy metod rozszerzeń w języku C#, przyjrzyjmy się kilku przykładom z życia wziętych.

Metoda rozszerzenia ciągu znaków Liczba słów WORD

Wyobraź sobie, że chcesz policzyć liczbę słów w ciągu znaków. Możesz stworzyć metodę rozszerzającą WordCount dla klasy string:

public static class StringExtensions
{
    // This extension method counts the number of words in a string.
    public static int WordCount(this string input)
    {
        // Split the string by whitespace characters and return the length of the resulting array.
        return input.Split(new[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries).Length;
    }
}

Teraz możesz łatwo policzyć liczbę słów w ciągu znaków w następujący sposób:

string text = "Extension methods are awesome!";
int wordCount = text.WordCount();
Console.WriteLine($"The text has {wordCount} words."); // Output: The text has 4 words.

Metoda rozszerzenia IEnumerable Mediana

Załóżmy, że masz zbiór liczb i chcesz obliczyć wartość mediany. Możesz stworzyć metodę rozszerzającą dla IEnumerable<int>:

using System;
using System.Collections.Generic;
using System.Linq;

public static class EnumerableExtensions
{
    // This extension method calculates the median of a collection of integers.
    public static double Median(this IEnumerable<int> source)
    {
        // Sort the collection and convert it to an array.
        int[] sorted = source.OrderBy(x => x).ToArray();
        int count = sorted.Length;

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

        // If the count is even, return the average of the two middle elements.
        if (count % 2 == 0)
        {
            return (sorted[count / 2 - 1] + sorted[count / 2]) / 2.0;
        }
        else
        {
            // Otherwise, return the middle element.
            return sorted[count / 2];
        }
    }
}

Dzięki tej metodzie rozszerzenia można łatwo znaleźć wartość mediany kolekcji:

int[] numbers = { 5, 3, 9, 1, 4 };
double median = numbers.Median();
Console.WriteLine($"The median value is {median}."); // Output: The median value is 4.

Metoda rozszerzenia DateTime StartOfWeek

Załóżmy, że chcesz znaleźć początek tygodnia dla danej daty. Możesz stworzyć metodę rozszerzającą dla struktury DateTime:

public static class DateTimeExtensions
{
    // This extension method calculates the start of the week for a given date.
    public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek = DayOfWeek.Monday)
    {
        // Calculate the difference in days between the current day and the start of the week.
        int diff = (7 + (dt.DayOfWeek - startOfWeek)) % 7;
        // Subtract the difference to get the start of the week.
        return dt.AddDays(-1 * diff).Date;
    }
}

Teraz możesz łatwo znaleźć początek tygodnia dla dowolnej daty:

DateTime today = DateTime.Today;
DateTime startOfWeek = today.StartOfWeek();
Console.WriteLine($"The start of the week is {startOfWeek.ToShortDateString()}.");
// Output will depend on the current date, e.g. The start of the week is 17/06/2024.

Generowanie plików PDF za pomocą IronPDF i metod rozszerzeń

W tej sekcji przedstawimy IronPDF, naszą wiodącą w branży bibliotekę do generowania plików PDF i pracy z nimi w języku C#. Zobaczymy również, jak możemy wykorzystać metody rozszerzeń, aby zapewnić bardziej płynne i intuicyjne doświadczenie podczas pracy z tą biblioteką.

IronPDF konwertuje HTML na PDF w sposób, który zachowuje układ i styl treści tak, jak wyglądałaby ona w przeglądarce internetowej. Biblioteka może pracować z surowym kodem HTML z plików, adresów URL i ciągów znaków. Oto krótki przegląd:

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");
    }
}

Tworzenie prostego pliku PDF

Zanim zagłębimy się w metody rozszerzeń, zobaczmy, jak utworzyć prosty plik PDF z HTML przy użyciu IronPDF:

using IronPdf;

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

Ten fragment kodu tworzy plik PDF z tekstem "Hello, World!" i zapisuje go w pliku o nazwie "HelloWorld.PDF".

Metody rozszerzeń dla IronPDF

Zobaczmy teraz, jak możemy wykorzystać metody rozszerzeń, aby zwiększyć funkcjonalność IronPDF i ułatwić pracę z tym narzędziem. Na przykład możemy stworzyć metodę rozszerzenia, która pobiera instancję klasy string i generuje plik PDF bezpośrednio na jej podstawie.

using IronPdf;

public static class StringExtensions
{
    // This extension method converts a string containing HTML to a PDF and saves it.
    public static void SaveAsPdf(this string htmlContent, string filePath)
    {
        var renderer = new ChromePdfRenderer();
        var PDF = renderer.RenderHtmlAsPdf(htmlContent);
        PDF.SaveAs(filePath);
    }
}

Dzięki tej metodzie rozszerzenia możemy teraz generować plik PDF bezpośrednio z ciągu znaków:

string html = "<h1>Extension Methods and IronPDF</h1><p>Generating PDFs has never been easier!</p>";
html.SaveAsPdf("ExtensionMethodsAndIronPdf.PDF");

Generowanie plików PDF z adresów URL

Inną przydatną metodą rozszerzenia, którą możemy stworzyć, jest taka, która generuje plik PDF na podstawie adresu URL. Możemy rozszerzyć klasę Uri, aby to osiągnąć:

using IronPdf;

public static class UriExtensions
{
    // This extension method converts a web URL to a PDF and saves it.
    public static void SaveAsPdf(this Uri url, string filePath)
    {
        var renderer = new ChromePdfRenderer();
        var PDF = renderer.RenderUrlAsPdf(url.AbsoluteUri);
        PDF.SaveAs(filePath);
    }
}

Teraz możemy łatwo wygenerować plik PDF z adresu URL w następujący sposób:

Uri url = new Uri("https://www.ironpdf.com/");
url.SaveAsPdf("UrlToPdf.PDF");

Wnioski

I voila – zapoznaliśmy się z koncepcją metod rozszerzeń w języku C#, dowiedzieliśmy się, jak je implementować przy użyciu metod statycznych i klas statycznych, oraz wykorzystaliśmy praktyczne przykłady dla różnych typów. Ponadto przedstawiliśmy IronPDF, bibliotekę do generowania i pracy z plikami PDF w języku C#. Gdy zaczniesz korzystać z metod rozszerzeń i IronPDF, zobaczysz, o ile bardziej przejrzysty, czytelny i wydajny może stać się Twój kod.

Chcesz wypróbować IronPDF? Możesz zacząć od 30-dniowego okresu próbnego IronPDF. Można z niego korzystać całkowicie za darmo do celów programistycznych, więc naprawdę możesz sprawdzić, na czym to polega. A jeśli podoba Ci się to, co widzisz, IronPDF zaczyna się już od liteLicense dla szczegółów dotyczących licencjonowania IronPDF. Aby uzyskać jeszcze większe oszczędności, sprawdź opcje zakupu pakietu Iron Software Suite, w ramach którego możesz otrzymać wszystkie dziewięć narzędzi Iron Software w cenie dwóch. Miłego kodowania!

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta