.NET ヘルプ

C# プライマリコンストラクター(開発者向けの仕組み)

公開済み 2024年1月14日
共有:

オブジェクト指向のC#プログラミングの中で、Primary Constructorsの導入は言語に新たな優雅さとシンプルさをもたらします。 C# 12では、パラメーター付きのコンストラクターを宣言するためのより簡潔な構文を提供する強力な機能として、プライマリーコンストラクターがインターセプターやコレクション式などの機能と共に登場しました。 以下のサイトで初期化コンストラクターを詳しく調べることができます:Microsoft C# ガイド.

この記事では、C# 12のプライマリコンストラクターを効率的に使用する方法を学び、その機能、使用事例、そして開発者がクラスの初期化にアプローチする方法をどのように変革するかについて探ります。

基礎の理解:C# におけるコンストラクター

コンストラクタは、オブジェクト指向プログラミングにおいて重要な役割を果たし、オブジェクトを初期化するための設計図として機能します。 従来、C#開発者はデフォルトコンストラクタまたはパラメータ付きコンストラクタを使用してクラスの初期状態を設定していました。 ですが、プライマリ コンストラクタの導入により、C#開発におけるこの重要な側面に対して、より効率的なアプローチが追加されました。

主コンストラクタの本質

C#におけるPrimary Constructorは、クラス宣言内で直接プロパティを宣言および初期化するための簡潔な方法です。 それは、プロパティへの値の定義と割り当てのプロセスを簡素化し、より宣言的で読みやすい構文を提供します。

主コンストラクターの利点

  1. 簡潔さ: プライマリコンストラクタは簡潔な構文を提供し、定型コードを減らして読みやすさを向上させます。

  2. スコーピング: 伝統的なコンストラクターとは異なり、主コンストラクターのパラメーターはクラスや構造体全体のスコープ内にあり、その使用に柔軟性を提供します。

  3. デフォルト値: デフォルトのパラメーター値は、オブジェクトの作成を簡略化し、開発者にとってより便利になります。

主コンストラクタの宣言

プライマリコンストラクタの構文は、クラスヘッダーにプロパティを直接宣言することを含みます。 基本的なPersonクラスの例を考えてみましょう:

public class Person(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age
    public override string ToString() => $"Name: {Name}, Age: {Age}";
}
public class Person(string name, int age)
{
    public string Name { get; } = name;
    public int Age { get; } = age
    public override string ToString() => $"Name: {Name}, Age: {Age}";
}
Public Class Person(String name, Integer age)
	Public ReadOnly Property Name() As String = name
	public Integer Age {get;} = age public override String ToString()
	If True Then
		Return $"Name: {Name}, Age: {Age}"
	End If
End Class
VB   C#

上記のコードスニペットでは、Person クラスには、インスタンスメンバー Name とインスタンスメンバー Age プロパティを初期化するプライマリコンストラクタが含まれています。 コンストラクタのパラメーターは、クラスまたは構造体の名前と共に宣言され、パブリックプロパティを定義する際に、パラメーターの値がそれらに割り当てられます。

例1: 2D空間における不変ポイント

public readonly struct Point(double x, double y)
{
    public double X { get; } = x;
    public double Y { get; } = y;
    public double Magnitude => Math.Sqrt(X * X + Y * Y);
}
public readonly struct Point(double x, double y)
{
    public double X { get; } = x;
    public double Y { get; } = y;
    public double Magnitude => Math.Sqrt(X * X + Y * Y);
}
'INSTANT VB WARNING: VB has no equivalent to the C# readonly struct:
'ORIGINAL LINE: public readonly struct Point(double x, double y)
Public Structure Point(Double x, Double y)
	Public ReadOnly Property X() As Double = x
	Public ReadOnly Property Y() As Double = y
	Public ReadOnly Property Magnitude() As Double
		Get
			Return Math.Sqrt(X * X + Y * Y)
		End Get
	End Property
End Structure
VB   C#

この例では、Point構造体の主コンストラクターがXおよびYプロパティを初期化し、文法がいかに簡潔で表現力豊かであるかを示しています。

例 2: デフォルト設定の設定可能なロガー

public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
{
    private readonly string _filePath = filePath;
    private readonly LogLevel _level = level;
    public void Log(string message)
    {
        // Actual logging implementation using _filePath and _level
    }
}
public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
{
    private readonly string _filePath = filePath;
    private readonly LogLevel _level = level;
    public void Log(string message)
    {
        // Actual logging implementation using _filePath and _level
    }
}
'INSTANT VB TODO TASK: The following line contains an assignment within expression that was not extracted by Instant VB:
'ORIGINAL LINE: public class Logger(string filePath = "log.txt", LogLevel level = LogLevel.Info)
Public Class Logger(String filePath = "log.txt", LogLevel level = LogLevel.Info)
	Private ReadOnly _filePath As String = filePath
	Private ReadOnly _level As LogLevel = level
	Public Sub Log(ByVal message As String)
		' Actual logging implementation using _filePath and _level
	End Sub
End Class
VB   C#

ここで、Loggerクラスの主要なコンストラクターは、filePathlevelにデフォルト値を提供し、柔軟で使いやすいと同時に、設定可能性を維持しています。

依存性注入の例3

public interface IService
{
    Distance GetDistance();
}
public class ExampleController(IService service) : ControllerBase
{
    public ActionResult<Distance> Get() => service.GetDistance();
}
public interface IService
{
    Distance GetDistance();
}
public class ExampleController(IService service) : ControllerBase
{
    public ActionResult<Distance> Get() => service.GetDistance();
}
Public Interface IService
	Function GetDistance() As Distance
End Interface
Public Class ExampleController(IService service)
	Inherits ControllerBase

	Public Function [Get]() As ActionResult(Of Distance)
		Return service.GetDistance()
	End Function
End Class
VB   C#

プライマリコンストラクターは、依存性注入のシナリオに適しています。 この例では、コントローラークラスがその依存関係を示しており、メンテナビリティを向上させ、ユニットテストを容易にしています。

例4: 幾何学的形状の階層を構築する

public abstract class Shape(double width, double height)
{
    public double Width { get; } = width;
    public double Height { get; } = height;
    public abstract double CalculateArea();
}
public class Rectangle(double width, double height) : Shape(width, height)
{
    public override double CalculateArea() => Width * Height;
}
public class Circle : Shape
{
    public Circle(double radius) : base(radius * 2, radius * 2) { }
    public override double CalculateArea() => Math.PI * Math.Pow(Width / 2, 2);
}
public abstract class Shape(double width, double height)
{
    public double Width { get; } = width;
    public double Height { get; } = height;
    public abstract double CalculateArea();
}
public class Rectangle(double width, double height) : Shape(width, height)
{
    public override double CalculateArea() => Width * Height;
}
public class Circle : Shape
{
    public Circle(double radius) : base(radius * 2, radius * 2) { }
    public override double CalculateArea() => Math.PI * Math.Pow(Width / 2, 2);
}
Public MustInherit Class Shape(Double width, Double height)
	Public ReadOnly Property Width() As Double = width
	Public ReadOnly Property Height() As Double = height
	Public MustOverride Function CalculateArea() As Double
End Class
Public Class Rectangle(Double width, Double height)
	Inherits Shape(width, height)

	Public Overrides Function CalculateArea() As Double
		Return Width * Height
	End Function
End Class
Public Class Circle
	Inherits Shape

	Public Sub New(ByVal radius As Double)
		MyBase.New(radius * 2, radius * 2)
	End Sub
	Public Overrides Function CalculateArea() As Double
		Return Math.PI * Math.Pow(Width / 2, 2)
	End Function
End Class
VB   C#

この例では、Shape クラスの主要なコンストラクタが幾何学的な形状階層の基礎を形成しています。 サブクラスのRectangleCircleは、一貫した初期化のために主コンストラクターを活用します。 Rectangleクラス自体がプライマリコンストラクタを宣言し、取得したプライマリコンストラクタのパラメータをShapeクラスのプライマリパラメータに渡します。 Circle クラスは、そのコンストラクタをクラス全体で定義し、base キーワードを使用して Shape コンストラクタのデフォルト値としてそのパラメータを渡すことで、柔軟性を示しています。

IronPDFの紹介

IronPDFは、開発者がPDFファイルを簡単に作成、操作、および変換できる多用途のC#ライブラリです。 請求書、レポート、その他のドキュメントの生成に関わらず、IronPDFを使用すると、HTMLコンテンツを洗練されたプロフェッショナルなPDFにシームレスに変換でき、C#アプリケーション内で直接利用することができます。

C# 主コンストラクター (開発者向けの動作方法): 図 1 - IronPDF ウェブページ

IronPDFのインストール: クイックスタート

IronPDFをC#プロジェクトに組み込むには、まずIronPDF NuGetパッケージをインストールしてください。 パッケージマネージャーコンソールで次のコマンドを実行してください:

Install-Package IronPdf

あるいは、「IronPDF」をNuGetパッケージマネージャーで見つけて、そこでインストールを進めてください。

C# プライマリコンストラクター (開発者のための動作方法): 図 2 - NuGet パッケージ マネージャー ブラウザーで IronPDF パッケージを検索する

IronPDFでPDFを生成する

IronPDFを使用してPDFを作成するのは、簡単なプロセスです。 以下の例を考えてみてください:

var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf");
Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
' Create a new PDF document
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("C:/GeneratedDocument.pdf")
VB   C#

この例では、IronPDF を使用して HTML コンテンツを PDF ドキュメントにレンダリングし、その後、指定された場所に保存します。 C#でPDFを作成および操作する方法の詳細については、こちらの完全なガイドをご覧ください。チュートリアルリンク「詳しくは、こちらをご覧ください」ドキュメントページ

C&#; 主コンストラクタ: クラス初期化の革命

C#のプライマリコンストラクタは、クラスの宣言内でクラスのプロパティを直接初期化するための宣言的で合理化されたアプローチを提供します。 このエレガントな機能がIronPDFにシームレスに統合できるかどうかを探りましょう。

IronPDFとC#プライマリコンストラクターの統合

C#プライマリコンストラクターは主にクラスの初期化に焦点を当てた言語機能ですが、これがIronPDFと直接統合されるケースは一般的ではないかもしれません。 IronPDFの主な機能はPDFドキュメントの生成および操作にあり、クラスの初期化の詳細はこのワークフローと直接一致しない可能性があります。

ただし、開発者は、IronPDFの構成やデータモデルに関連するカスタムクラスや構造を定義する際に、C#のPrimary Constructorsを活用することができます。 たとえば、アプリケーションがPDF関連の設定や構成を管理するための特定のクラス構造を必要とする場合、C#プライマリコンストラクタは、これらのクラスを簡潔に初期化するための貴重なツールとなります。

public class PdfGenerationSettings(string title, bool includeHeader, bool includeFooter)
{
    public string Title { get; } = title;
    public bool IncludeHeader { get; } = includeHeader;
    public bool IncludeFooter { get; } = includeFooter;
    // Additional properties...
}
// Usage with IronPDF
var pdfSettings = new PdfGenerationSettings("My PDF Title", true, false);
var renderOptions = new ChromePdfRenderOptions();
// Apply settings from PdfGenerationSettings
renderOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderOptions.MarginTop = 20;
renderOptions.MarginBottom = 20;
renderOptions.MarginLeft = 10;
renderOptions.MarginRight = 10;
renderOptions.Title = pdfSettings.Title ?? string.Empty;
if (pdfSettings.IncludeHeader)
{
    renderOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        DrawDividerLine = true
    };
}
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderingOptions = renderOptions;
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf");
public class PdfGenerationSettings(string title, bool includeHeader, bool includeFooter)
{
    public string Title { get; } = title;
    public bool IncludeHeader { get; } = includeHeader;
    public bool IncludeFooter { get; } = includeFooter;
    // Additional properties...
}
// Usage with IronPDF
var pdfSettings = new PdfGenerationSettings("My PDF Title", true, false);
var renderOptions = new ChromePdfRenderOptions();
// Apply settings from PdfGenerationSettings
renderOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderOptions.MarginTop = 20;
renderOptions.MarginBottom = 20;
renderOptions.MarginLeft = 10;
renderOptions.MarginRight = 10;
renderOptions.Title = pdfSettings.Title ?? string.Empty;
if (pdfSettings.IncludeHeader)
{
    renderOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        DrawDividerLine = true
    };
}
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderingOptions = renderOptions;
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf");
Public Class PdfGenerationSettings(String title, Boolean includeHeader, Boolean includeFooter)
	Public ReadOnly Property Title() As String = title
	Public ReadOnly Property IncludeHeader() As Boolean = includeHeader
	Public ReadOnly Property IncludeFooter() As Boolean = includeFooter
	' Additional properties...
End Class
' Usage with IronPDF
Private pdfSettings = New PdfGenerationSettings("My PDF Title", True, False)
Private renderOptions = New ChromePdfRenderOptions()
' Apply settings from PdfGenerationSettings
renderOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderOptions.MarginTop = 20
renderOptions.MarginBottom = 20
renderOptions.MarginLeft = 10
renderOptions.MarginRight = 10
renderOptions.Title = If(pdfSettings.Title, String.Empty)
If pdfSettings.IncludeHeader Then
	renderOptions.TextHeader = New TextHeaderFooter With {
		.CenterText = "Page {page} of {total-pages}",
		.DrawDividerLine = True
	}
End If
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderingOptions = renderOptions
pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomizedDocument.pdf")
VB   C#

この例では、PdfGenerationSettings クラスが C# プライマリコンストラクタを使用して、PDF 生成設定に関連するプロパティを初期化します。 後で、どのレンダリングオプションを追加し、どれをスキップするかを判断するために使用できます。出力には、主要なコンストラクタパラメータを使用して設定されたヘッダーテキストとタイトルが含まれています。

C# プライマリ コンストラクタ (開発者向けの動作方法): 図3 - 上記のコード例からの出力PDF

結論

結論として、C#のプライマリコンストラクタは、クラスの初期化に対する洗練された表現力豊かなアプローチを提供します。 彼らの宣言型構文は、コードの可読性を向上させ、不変性を促進し、デフォルト値を持つオブジェクトの作成プロセスを簡素化します。 プロパティを定義する際や不変性を強制する際、デフォルト値を採用する際において、既定コンストラクターは、C#プログラミングのダイナミックな世界でクラスの初期化技術を習得するための強力なツールです。

C#のプライマリコンストラクタとIronPDFの直接統合が主な焦点ではないかもしれませんが、これら二つの要素は調和して動作することができます。 C# の主コンストラクタは、クラスの初期化の明確さと簡潔さを高めるため、IronPDF ワークフローに関連する構造や設定を定義する際に重要です。

IronPDFの力を活用して堅牢なPDF生成を行い、クラス初期化の優雅さが重要な場合にはC#のPrimary Constructorsを使用してください。 このダイナミックなデュオは、活気に満ちたC#プログラミングの世界で、創造性と効率性をもってドキュメント生成の複雑さをナビゲートする力を与えます。

IronPDFは無料体験およびそのLiteライセンス$749から開始します。

< 以前
Null 合体演算子 C# (開発者向けの使い方)
次へ >
C# 二重疑問符(開発者向けの仕組み)