IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# Słowo kluczowe init (Jak to działa dla programistów)

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

Słowo kluczowe init w C# 9.0 wprowadziło nowy sposób definiowania właściwości klas w celu tworzenia obiektów niezmiennych. W wcześniejszych wersjach języka C# właściwości były zazwyczaj używane wraz z akcesorami get i set do odczytu i zapisu w polach obiektów. Jednak dzięki init można ustawić właściwości jako zapisywalne tylko podczas inicjalizacji obiektu, a później uczynić je tylko do odczytu.

W tym samouczku omówimy użycie słowa kluczowego init w języku C# na praktycznych przykładach i scenariuszach z wykorzystaniem biblioteki IronPDF. Dowiesz się również o kluczowych różnicach między tradycyjnymi ustawnikami właściwości (set) a nowymi ustawnikami typu init-only.

Podstawowy przykład słowa kluczowego Init

Zacznijmy od prostego przykładu:

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

var person = new Person
{
    FirstName = "Iron",
    LastName = "Dev"
};

// person.FirstName = "Jane";  // This will give a compile-time error.

Slowo kluczowe init w C# (Jak dziala dla deweloperow): Rysunek 1 - IDE wyrzuca blad z powodu oznaczenia wlasciwosci jako tylko-do-inicjalizacji

W tym przykladzie FirstName i LastName sa oznaczone jako wlasciwosci tylko-do-inicjalizacji. Oznacza to, że można je przypisywać wyłącznie podczas inicjalizacji obiektu. Po utworzeniu obiektu próba zmiany wartości spowoduje błąd kompilacji.

Dlaczego warto używać słowa kluczowego "Init"?

Głównym powodem użycia słowa kluczowego init jest uczynienie właściwości obiektu niezmiennymi po inicjalizacji. Tradycyjnie można było oznaczyć właściwości jako tylko do odczytu, aby osiągnąć niezmienność. Często jednak potrzebny jest konstruktor, który akceptuje wszystkie wartości niezbędne do ustawienia pól, co może prowadzić do powstawania szablonowego kodu konstruktóra. Dzięki init możesz osiągnąć ten sam cel, używając inicjalizatorów obiektów bez pisania długich konstruktorów.

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
    // Without using constructor boilerplate for property initialization
}

var person = new Person
{
    FirstName = "John",
    LastName = "Doe"
};

Inicjalizacja obiektów za pomocą właściwości typu Init-Only

Korzystanie z init działa płynnie z inicjalizatorami obiektów. Zamiast polegać na konstruktórach do ustawiania wartości, możesz zdefiniować potrzebne właściwości bezpośrednio podczas tworzenia obiektu.

public class Point
{
    public int X { get; init; }
    public int Y { get; init; }
}

var point = new Point { X = 10, Y = 20 };

// point.X = 30;  // This will throw a compile-time error

To tworzy prosty, niezmienny obiekt typu Point. Zauwaz, ze wartosci dla X i Y sa ustawiane przy inicjalizacji i nie mozna ich pozniej zmienic.

Mieszanie init z konstruktórami

Chociaż głównym zastosowaniem init jest inicjalizacja obiektów za pomocą inicjalizatorów obiektów, w razie potrzeby nadal można użyć konstruktóra. Jest to szczególnie przydatne podczas wymuszania określonych wartości właściwości podczas tworzenia obiektów.

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
}

Można używać zarówno konstruktorów, jak i właściwości init jednocześnie. Takie podejście zapewnia większą elastyczność, jednocześnie wymuszając niezmienność po utworzeniu obiektu.

Zalety Init w porównaniu z Private Set

Wcześniej programiści używali prywatnego akcesora set, aby ograniczyć modyfikację właściwości poza klasą.

public class Person
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
}

Chociaż takie podejście działa, wymaga ono użycia szablonowego kodu konstruktóra do zainicjowania właściwości. Ponadto pozwala to samej klasie na późniejsze modyfikowanie właściwości, co nie zawsze jest idealnym rozwiązaniem w przypadku obiektów niezmiennych. Słowo kluczowe init eliminuje ten problem, ponieważ pozwala na inicjalizację tylko w momencie tworzenia obiektu i blokuje wszelkie późniejsze modyfikacje.

Obsługa inicjalizacji za pomocą pól tylko do odczytu i akcesorów inicjalizacyjnych

Słowo kluczowe init może inicjalizować pola lub właściwości podczas tworzenia obiektu, a po tym procesie pozostają one niezmienne. Podczas gdy pola tylko do odczytu zapewniają niezmienność, akcesor init oferuje podobną funkcjonalność dla właściwości. Oto dwa sposoby radzenia sobie z niezmiennością: za pomocą pól tylko do odczytu i właściwości init.

Korzystanie z pól tylko do odczytu w konstruktorze

W tym przykladzie uzywamy pol tylko-do-odczytu dla firstName i lastName, ktore sa ustawiane podczas konstrukcji obiektu. Pola te można przypisać tylko raz w konstruktorze i nie można ich później modyfikować:

public class Person
{
    private readonly string firstName;
    private readonly string lastName;

    public string FirstName => firstName;
    public string LastName => lastName;

    public Person(string firstName, string lastName)
    {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

Wykorzystanie akcesorów Init do inicjalizacji

Alternatywnie możemy użyć akcesora init do utworzenia właściwości tylko do odczytu, które można zainicjować podczas tworzenia obiektu, ale których nie można później zmienić. Eliminuje to potrzebę stosowania pól tylko do odczytu i zapewnia bardziej nowoczesną składnię:

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

Wprowadzenie do IronPDF

Slowo kluczowe init w C# (Jak dziala dla deweloperow): Rysunek 2 - IronPDF: Biblioteka PDF dla C#

IronPDF to potężna biblioteka do generowania i edycji plików PDF przeznaczona dla programistów C#. Ułatwia pracę z plikami PDF poprzez konwersję HTML, CSS, obrazów i innych treści do dokumentów PDF. Dzięki takim funkcjom, jak renderowanie z dokładnością do piksela, obsługa wielu platform oraz łatwa integracja z projektami .NET, IronPDF jest idealnym rozwiązaniem dla programistów, którzy muszą szybko tworzyć pliki PDF o wysokiej jakości. Można go używać z .NET Core, .NET Framework i .NET Standard, a ponadto obsługuje szeroki zakres platform, w tym Windows, Linux i macOS.

Przypadek: Uzywanie IronPDF ze slowem kluczowym Init w C#

Aby utworzyć obiekty niezmienne w projekcie C# podczas generowania plików PDF, można połączyć słowo kluczowe init z biblioteką IronPDF. Słowo kluczowe init zapewnia integralność obiektu po jego zainicjowaniu, podczas gdy IronPDF przetwarza dane i generuje pliki PDF w oparciu o ten niezmienny model.

Upewnij się, że w projekcie poprawnie odwołujesz się do IronPDF. Można ją zainstalować za pośrednictwem NuGet:

PM > Install-Package IronPdf

Oto przykładowy kod:

using IronPdf;

public class Person
{
    public int Id { get; init; }
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

public class PDFGenerator
{
    public static void CreatePersonPDF(Person person)
    {
        var htmlContent = $@"
        <html>
        <body>
            <h1>Person Information</h1>
            <p>ID: {person.Id}</p>
            <p>First Name: {person.FirstName}</p>
            <p>Last Name: {person.LastName}</p>
        </body>
        </html>";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs($"Person_{person.Id}.pdf");
    }
}

class Program
{
    static void Main(string[] args)
    {
        var person = new Person
        {
            Id = 1,
            FirstName = "Iron",
            LastName = "Dev"
        };

        PDFGenerator.CreatePersonPDF(person);
    }
}

Wnioski

Slowo kluczowe init w C# (Jak dziala dla deweloperow): Rysunek 3 - Strona licencji IronPDF

Podsumowując, słowo kluczowe init w języku C# pozwala tworzyć obiekty niezmienne, oferując jednocześnie elastyczność podczas inicjalizacji obiektów. Jest to czystsza i bezpieczniejsza alternatywa dla prywatnych akcesorów zestawów, zmniejszająca potrzebę stosowania szablonowego kodu konstruktóra. Połączenie słowa kluczowego init z polami tylko do odczytu, strukturami i logiką walidacji pomaga tworzyć solidne i bezpieczne struktury danych, które zachowują niezmienność bez utraty czytelności lub elastyczności. IronPDF oferuje bezplatna wersje probna, a licencje zaczynaja sie od $999. Daje to dostęp do wszystkich funkcji, w tym edycji, kompresji i zabezpieczania plików PDF.

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