IRONSOFTWAREHOME
開発者向けアップデート

C# Init Keyword(開発者向けの仕組み)

Jacob Mellor、Ironチームの最高技術責任者(CTO)
Jacob Mellor
Updated: 2026年4月21日

C# 9.0 の init キーワード は、イミュータブルなオブジェクトを作成するための新しいクラスプロパティの定義方法を導入しました。 C# の以前のバージョンでは、プロパティは通常、get および set アクセサーを使用してオブジェクトフィールドを読み書きしていました。 しかし、init を使用すると、オブジェクト初期化時のみ書き込み可能なプロパティを作成し、その後は読み取り専用にします。

このチュートリアルでは、IronPDF ライブラリを使った C# init キーワードの実践的な例とシナリオを探求します。 また、従来のプロパティセッター(set)と新しい init のみのセッターの重要な違いについても学びます。

Init キーワードの基本的な例

基本的な例から始めましょう:

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.

C# Initキーワード (開発者向けの作動方法): 図1 - プロパティがinit-onlyとしてマークされているため、IDEがエラーをスローしている

この例では、LastNameがinit-onlyプロパティとしてマークされています。 これは、オブジェクトの初期化時だけに代入できることを意味します。 オブジェクトが作成された後、値を変更しようとするとコンパイル時エラーになります。

なぜ Init キーワードを使用するのか?

init キーワードを使用する主な理由は、初期化後にオブジェクトプロパティをイミュータブルにすることです。 従来、プロパティを読み取り専用としてマークしてイミュータビリティを実現することができました。 しかしながら、フィールドを設定するためのすべての必要な値を受け入れるコンストラクターがしばしば必要になり、コンストラクターボイラープレートコードの原因となることがあります。 init を使用すれば、長いコンストラクターを書くことなく、オブジェクト初期化子を使用して同じ目標を達成できます。

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

Init のみのプロパティによるオブジェクトの初期化

init を使用すると、オブジェクト初期化子とシームレスに連携できます。 コンストラクターに頼らずに値を設定する代わりに、オブジェクトを作成しながら必要なプロパティを直接定義できます。

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

これは、Point型のシンプルで不変なオブジェクトを生成します。 値はYの初期化時に設定され、その後は変更できません。

コンストラクターとの Init の混合利用

init の主な使用ケースはオブジェクト初期化子を通じたオブジェクト初期化ですが、必要に応じてコンストラクターを使用することもできます。 これはオブジェクトの作成中に特定のプロパティ値を強制する際に特に有用です。

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

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

コンストラクターと init プロパティの両方を一緒に使用できます。 このアプローチは、オブジェクト構築後のイミュータビリティを維持しながら、より多くの柔軟性を提供します。

Private Set よりも Init の利点

以前の開発者は、クラス外部でのプロパティ変更を制限するためにプライベート set アクセサーを使用していました。

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

このアプローチは機能しますが、プロパティを初期化するためにコンストラクターボイラープレートコードが必要です。 また、クラス自体が後でプロパティを変更できるようになるため、必ずしもイミュータブルなオブジェクトに理想的であるとは限りません。 init キーワードは、この問題を解決します。オブジェクト作成時の初期化のみを許可し、その後の変更はブロックされます。

読み取り専用フィールドと Init アクセサーによる初期化の処理

init キーワードは、オブジェクト作成時にフィールドまたはプロパティを初期化し、その後イミュータブルのままにします。 読み取り専用フィールドはイミュータビリティを提供しますが、init アクセサーはプロパティに対して同様の機能を提供します。 ここでは、読み取り専用フィールドと init プロパティを使用してイミュータビリティを処理する方法を示します。

コンストラクターを用いた読み取り専用フィールドの使用

この例では、lastNameの読み取り専用フィールドを使用し、オブジェクトの構築時に設定します。 これらのフィールドはコンストラクター内で一度だけ代入可能で、その後は変更できません。

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

イニット アクセサーによる初期化の使用

または、init アクセサーを使用してオブジェクト作成時に初期化できるがその後変更できない読み取り専用プロパティを作成することができます。 これにより、読み取り専用フィールドは不要になり、より現代的な構文を提供します。

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

IronPDFの紹介

C# Initキーワード (開発者向けの作動方法): 図2 - IronPDF: C# PDFライブラリ

IronPDF は、C# 開発者向けに設計された強力な PDF 生成および操作ライブラリです。 PDF を HTML、CSS、画像、その他のコンテンツから変換して作成する作業を簡素化します。 ピクセルパーフェクトなレンダリング、クロスプラットフォームのサポート、および .NET プロジェクトへの簡単な統合などの機能を備えた IronPDF は、高品質な PDF を迅速に作成する必要がある開発者に最適です。 .NET Core、Framework、および Standard で使用でき、Windows、Linux、macOS など幅広いプラットフォームをサポートします。

ケース: IronPDFとC# Initキーワードの使用

C# プロジェクトでイミュータブルなオブジェクトを作成しながら PDF を生成するには、init キーワードを IronPDF と組み合わせて使用できます。 init キーワードはオブジェクトが初期化された後の整合性を保証し、IronPDF はそのイミュータブルなモデルに基づいてデータを処理し、PDF を生成します。

プロジェクトに IronPDF が正しく参照されていることを確認してください。 NuGet 経由でインストールできます:

PM > Install-Package IronPdf

コード例はこちら:

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

結論

要するに、C# の init キーワードは、オブジェクト初期化時に柔軟性を提供しながら、イミュータブルなオブジェクトを作成することを可能にします。 これは、プライベート set アクセサーに代わるよりクリーンで安全な選択肢であり、コンストラクターボイラープレートコードを削減します。 init キーワードを読み取り専用フィールド、構造体、および検証ロジックと組み合わせることで、読みやすさや柔軟性を損なうことなく、イミュータビリティを維持する堅牢で安全なデータ構造を構築するのに役立ちます。 IronPDFは無料トライアルを提供しており、ライセンスは**$999**から始まります。 これにより、PDF の編集、圧縮、およびセキュリティなどの完全な機能にアクセスできます。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. ブラウズを選択し、"IronPDF"を検索
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

またはここからWindowsインストーラーをダウンロードする。

  1. IronPDFを~/Libsなどの場所に解凍し、ソリューションディレクトリ内に配置する
  2. Visual Studioソリューションエクスプローラーで参照を右クリックし、"IronPDF.dll"をブラウズして選択

ライセンスは$999から