フッターコンテンツにスキップ
.NETヘルプ

C# Record(開発者向けの動作方法)

C# レコード は、不変データモデルの作成を容易にし、定型コードを削減することでコーディング体験を向上させるために導入された強力な機能です。 このチュートリアルは、C# のレコードの概念を初心者に簡単に理解させることを目的としており、その構文、使用法、および利点を案内します。

データ転送オブジェクト、設定、または単にデータを効率的に表現する必要がある場合でも、C# レコードは簡潔で開発者に優しいアプローチを提供します。 この記事の後半で IronPDF についても説明します。

C# レコードとは何ですか?

C# におけるレコードは、不変データモデルを定義するための簡略化された構文を提供する参照型です。 従来のクラス定義とは異なり、レコードは参照の等価性よりも値に基づく等価性を重視します。 つまり、メモリ上の同じオブジェクト場所を参照するだけではなく、プロパティ値が同じであれば2つのレコードインスタンスは同等と見なされます。

レコードの種類: クラスと構造体

C# には2つの主要なレコードの種類があります:

  • レコードクラス: デフォルトのレコードタイプであり、参照型です。
  • レコード構造体: 値型が必要なシナリオのために導入され、これらはデフォルトで不変であり、レコードクラスと同様の値ベースの比較を提供します。

レコード宣言

レコードを宣言するのは簡単です。 record キーワードの後に型(クラスまたは構造体)とレコードの名前を続けてレコードを定義できます。 たとえば、単純な人物レコードは次のように宣言できます:

public record class Person(string FirstName, string LastName);
public record class Person(string FirstName, string LastName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record class Person(string FirstName, string LastName)
$vbLabelText   $csharpLabel

この宣言には、FirstNameLastName の位置パラメーターが含まれており、これにより、背後ではこれらのプロパティのための公開プロパティと主コンストラクタが生成されます。

レコードの不変性

レコードは不変になるように設計されており、レコードインスタンスが作成されると、そのプロパティ値は変更できません。 この不変性は、予測可能でスレッドセーフなアプリケーションを作成するのに重要であり、特に同時操作を扱う際に有用です。

不変レコード構造体

不変のレコード構造体は、record struct 構文を使用してレコードクラスと同様に宣言されます。 それはレコードの不変性と値ベースの比較を値型のパフォーマンス上の利点と組み合わせます:

public readonly record struct ImmutablePerson(string FirstName, string LastName);
public readonly record struct ImmutablePerson(string FirstName, string LastName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public readonly record struct ImmutablePerson(string FirstName, string LastName)
$vbLabelText   $csharpLabel

レコードの操作

レコードはデータ中心の型の作成と使用を簡略化します。継承をサポートし、破壊を伴わない変更を可能にし、デバッグを容易にするための組み込みの書式設定を提供します。 これらの機能を例を通して探求しましょう。

レコードの作成と比較

次の例では、人物レコードのインスタンスを2つ作成しています:

var person1 = new Person("Iron", "Software");
var person2 = new Person("Iron", "Software");
Console.WriteLine(person1 == person2); // Output: True
var person1 = new Person("Iron", "Software");
var person2 = new Person("Iron", "Software");
Console.WriteLine(person1 == person2); // Output: True
Dim person1 = New Person("Iron", "Software")
Dim person2 = New Person("Iron", "Software")
Console.WriteLine(person1 = person2) ' Output: True
$vbLabelText   $csharpLabel

person1person2 が2つの別個のインスタンスであるにもかかわらず、プロパティの値に基づいて同等と見なされ、値ベースの等価性を示しています。 これは、参照平等に焦点を当てた参照型のデフォルトの振る舞いからの重要な逸脱です。

不変プロパティ

設計上、レコードのプロパティは不変です。 つまり、レコードインスタンスが作成された後、そのプロパティ値を変更することはできません。

// This will result in a compilation error
// person1.FirstName = "Jane";
// This will result in a compilation error
// person1.FirstName = "Jane";
' This will result in a compilation error
' person1.FirstName = "Jane";
$vbLabelText   $csharpLabel

レコードの継承

レコードは継承をサポートしており、データモデルの階層を作成できます。 基本レコードを次のように拡張できます:

public record Employee(string FirstName, string LastName, string Department) : Person(FirstName, LastName);
public record Employee(string FirstName, string LastName, string Department) : Person(FirstName, LastName);
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Employee(string FirstName, string LastName, string Department) : Person(FirstName, LastName)
$vbLabelText   $csharpLabel

この Employee レコードは Person を拡張し、追加の Department プロパティを追加しています。

高度なレコード機能

破壊を伴わない変更

レコードは、既存のレコードインスタンスからいくつかのプロパティを変更した新しいレコードインスタンスを作成するための組み込みの方法を提供します。これは破壊を伴わない変更として知られています。

var updatedPerson = person1 with { FirstName = "Jane" };
var updatedPerson = person1 with { FirstName = "Jane" };
'INSTANT VB TODO TASK: C# 'with expressions' are not converted by Instant VB:
'var updatedPerson = person1 with { FirstName = "Jane" }
$vbLabelText   $csharpLabel

組み込み書式設定

レコードには組み込みのフォーマットがあり、デバッグやログ作成を簡素化するために、プロパティの文字列表現を自動的に提供します。

Console.WriteLine(person1);
Console.WriteLine(person1);
Console.WriteLine(person1)
$vbLabelText   $csharpLabel

C# レコードの利点

  • 簡略化された構文: レコードは定型コードの必要性を減らし、モデルをより簡潔で読みやすくします。
  • 不変データモデル: レコードの不変性は、スレッドセーフなアプリケーションの作成を支援します。
  • 値ベースの等価性: レコードは参照の等価性ではなく値ベースの等価性を使用し、データ中心のタイプに理想的です。
  • 継承のサポート: レコードは他のレコードから継承でき、コードの再利用や階層データモデルを可能にします。

IronPDFの紹介: C# の PDF ライブラリ

C# レコード (開発者向けの機能): 図 1

IronPDF の概要 は .NET 開発者向けの PDF ライブラリであり、C# アプリケーション内で PDF ドキュメントを生成、編集、操作するために設計されています。 IronPDFは、HTMLコンテンツから、CSS、画像、およびJavaScriptからPDFをレンダリングすることをサポートしています。

その主要な機能は、WebコンテンツからPDFドキュメントを作成することで、HTML文字列、URL、およびASPX Web フォームをPDFファイルに変換するための合理化されたアプローチを提供します。 IronPDFは、フォームアプリケーション、サーバーアプリケーション、Webアプリケーションを含むさまざまなアプリケーションタイプで効率的に動作します。

IronPDF ライブラリのインストール方法

IronPDFのインストールは簡単で、Visual Studio の NuGet パッケージマネージャーを通じて実行できます。 次の手順に従います。

  1. Visual Studioで、ソリューションエクスプローラーに移動し、参照を右クリックして「NuGet パッケージの管理」を選択します。
  2. NuGet パッケージマネージャーで、ブラウズを選択し、「IronPdf」を検索します。
  3. IronPDFパッケージを見つけてインストールをクリックします。

C# レコード (開発者向けの機能): 図 2

別の方法として、パッケージ マネージャー コンソールで次のコマンドを使ってインストールすることもできます:

Install-Package IronPdf

サンプル: IronPDF で C# レコードを使用する

C# レコードを使用してデータを保持し、それからIronPDFを使用してPDFドキュメントを生成する実用的な例を考えてみましょう:

public record Person(string FirstName, string LastName);

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of the Person record.
        var person = new Person("Iron", "Developer");

        // Initialize a new renderer object for generating PDF files using Chrome's rendering engine.
        var renderer = new IronPdf.Rendering.ChromePdfRenderer();

        // Render an HTML string as a PDF document.
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {person.FirstName} {person.LastName}</p>");

        // Save the PDF to the specified location.
        pdf.SaveAs("PersonRecord.pdf");
    }
}
public record Person(string FirstName, string LastName);

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of the Person record.
        var person = new Person("Iron", "Developer");

        // Initialize a new renderer object for generating PDF files using Chrome's rendering engine.
        var renderer = new IronPdf.Rendering.ChromePdfRenderer();

        // Render an HTML string as a PDF document.
        var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {person.FirstName} {person.LastName}</p>");

        // Save the PDF to the specified location.
        pdf.SaveAs("PersonRecord.pdf");
    }
}
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Person(string FirstName, string LastName)

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of the Person record.
		Dim person As New Person("Iron", "Developer")

		' Initialize a new renderer object for generating PDF files using Chrome's rendering engine.
		Dim renderer = New IronPdf.Rendering.ChromePdfRenderer()

		' Render an HTML string as a PDF document.
		Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {person.FirstName} {person.LastName}</p>")

		' Save the PDF to the specified location.
		pdf.SaveAs("PersonRecord.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

この例では、シンプルな Person レコードを作成し、IronPDF を使用してその人の名前を表示するPDFドキュメントを生成します。 C#レコードが.NETアプリケーションでのPDF生成とどのようにシームレスに統合できるかを示しています。

C# レコード (開発者向けの機能): 図 3

IronPDF ライセンス

C# レコード (開発者向けの機能): 図 4

IronPDFは、さまざまなニーズに合わせた個人および商用オプションを含むさまざまなライセンスを提供する商用製品です。 各購入にはライフタイムライセンスと30日間の返金保証が付いています。 IronPDFのライセンスオプションを探索し、ライセンスの購入を検討してください。

結論

C#レコードは、.NETアプリケーションのデータモデリングを簡素化する上で重要な一歩を表しています。 レコードを理解し活用することで、開発者はより信頼性が高く、保守可能で可読性の高いコードベースを作成することができます。

大規模なアプリケーションや単純なデータ構造のいずれであっても、不変性から値ベースの等価性まで、提供される機能はC#ツールキットにおいて欠かせないツールとなります。

IronPDFは、IronPDF Free Trial を使用して購入を決定する前にその機能をテストする機会を提供します。 ソフトウェアがニーズを満たしていると判断した場合、$799 から始めてライセンスを購入することができます。

よくある質問

C#のレコードを使用してPDFを生成するにはどうすればよいですか?

C#のレコードはデータを効率的に格納することができ、その後IronPDFを使用してPDFドキュメントを生成するのに利用できます。必要なデータを保持するレコードを作成し、このデータをIronPDFでPDF形式にレンダリングすることが可能です。

C#のレコードを使用する利点は何ですか?

C#のレコードにはいくつかの利点があります。構文が簡潔で、不変データモデル、値に基づく等価、継承をサポートしています。これらの機能により、レコードは簡潔で信頼性のあるデータ中心の型を作成するのに適しています。

C#におけるレコードはどのように等価を処理しますか?

C#のレコードは値に基づく等価を強調しています。これは、プロパティの値が一致する場合、メモリの位置に関係なく、2つのレコードインスタンスが等価と見なされることを意味します。

C#でレコードを宣言する方法は?

C#のレコードは、recordキーワードに続けて種類(クラスまたは構造体)とレコードの名前を指定して宣言します。例えば、public record class Person(string FirstName, string LastName);です。

レコードクラスとレコード構造体の違いは何ですか?

レコードクラスは参照型で、レコード構造体は値型です。どちらも不変性と値に基づく比較を提供しますが、メモリの割り当てと使用ケースにおいて異なります。

C#レコードのプロパティを作成後に変更することはできますか?

C#のレコードは、不変性を持つように設計されており、作成後にプロパティを変更できません。ただし、変更されたプロパティを持つ新しいレコードインスタンスを作成する非破壊的な変更を行うことができます。

IronPDFはC#アプリケーションをどのように強化しますか?

IronPDFは、PDFドキュメントの生成、編集、操作において強力な機能を提供することでC#アプリケーションを強化します。HTMLコンテンツからPDFを作成することができ、ドキュメント管理において汎用性のあるツールとなります。

IronPDFを.NETプロジェクトにインストールする方法は?

.NETプロジェクトにIronPDFをインストールするには、Visual StudioのNuGetパッケージマネージャーを使用するか、パッケージマネージャーコンソールでInstall-Package IronPdfコマンドを実行します。

C#レコードで非破壊的な変更がどのように機能するか?

C#レコードの非破壊的な変更では、既存のインスタンスから一部のプロパティを変更して新しいレコードインスタンスを作成しますが、元のインスタンスは変更しません。

C#開発におけるPDFライブラリの役割は何ですか?

IronPDFのようなPDFライブラリは、C#開発においてPDFドキュメントの生成、編集、操作のために使用されます。開発者がアプリケーションにPDF機能を効率的に統合するのを助けます。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。