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

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

C# は、プロジェクトでのコードの組織と管理を強化するユニークな機能を提供します: 部分クラスキーワードです。 この機能は、部分 モディファイアを介してアクセス可能で、開発者がクラス、インターフェイス、または構造体の定義を複数のファイルに分割できるようにします。 この機能は、ユーザーインターフェイス制御の定義やサービスラップコードなど、既に生成されたソースコードで独自のビジネスロジックと一緒に作業する際に特に有益です。 この記事では、Visual Studio を使用して部分クラスと IronPDF PDF Library for .NET について学びます。

部分クラスの理解

同じアクセスレベルを維持する部分クラスは、C# の部分モディファイアを用いて定義され、クラス定義が同じアセンブリ内の二つ以上のファイルに分散していることを示します。 このアプローチは、関連するコードを一緒に保ちながら、関心の分離を維持します。 例えば、部分クラス Employee は、ビジネスロジックを1 つのファイルに、データアクセス層を別のファイルに持つことができ、両方のパーツが1 つのクラスにコンパイルされます。 この分離により、コードの管理が容易になるだけでなく、複数の開発者が同じクラスでコンフリクトなしで作業できます。

// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Method for calculating pay
    public void CalculatePay() 
    { 
        // Implementation of pay calculation
    }
}

// File 2: Employee_DataAccess.cs
public partial class Employee
{
    // Method for loading employee data
    public void Load() 
    { 
        // Implementation of data loading
    }
}
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Method for calculating pay
    public void CalculatePay() 
    { 
        // Implementation of pay calculation
    }
}

// File 2: Employee_DataAccess.cs
public partial class Employee
{
    // Method for loading employee data
    public void Load() 
    { 
        // Implementation of data loading
    }
}
' File 1: Employee_BusinessLogic.cs
Partial Public Class Employee
	' Method for calculating pay
	Public Sub CalculatePay()
		' Implementation of pay calculation
	End Sub
End Class

' File 2: Employee_DataAccess.cs
Partial Public Class Employee
	' Method for loading employee data
	Public Sub Load()
		' Implementation of data loading
	End Sub
End Class
$vbLabelText   $csharpLabel

部分メソッドの活用

部分クラスは、宣言されるが必ずしも実装されるわけではない部分メソッドを定義することもできます。 これらのメソッドにより、クラスの一部がメソッドを実装せずに宣言できるシナリオを許可し、もう一部がそれを実装することができます。 実装が提供されない場合、部分メソッドの呼び出しはコンパイル時に除去され、パフォーマンス上のペナルティは発生しません。

// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Declaration of a partial method to be called when pay is calculated
    partial void OnPayCalculated(double amount);

    public void CalculatePay()
    {
        double amount = 1000; // Simplified calculation
        OnPayCalculated(amount); // Call the partial method
    }
}

// File 2: Employee_Events.cs
public partial class Employee
{
    // Implementation of the partial method
    partial void OnPayCalculated(double amount)
    {
        Console.WriteLine($"Pay calculated: {amount}");
    }
}
// File 1: Employee_BusinessLogic.cs
public partial class Employee
{
    // Declaration of a partial method to be called when pay is calculated
    partial void OnPayCalculated(double amount);

    public void CalculatePay()
    {
        double amount = 1000; // Simplified calculation
        OnPayCalculated(amount); // Call the partial method
    }
}

// File 2: Employee_Events.cs
public partial class Employee
{
    // Implementation of the partial method
    partial void OnPayCalculated(double amount)
    {
        Console.WriteLine($"Pay calculated: {amount}");
    }
}
' File 1: Employee_BusinessLogic.cs
Partial Public Class Employee
	' Declaration of a partial method to be called when pay is calculated
	Partial Private Sub OnPayCalculated(ByVal amount As Double)
	End Sub

	Public Sub CalculatePay()
		Dim amount As Double = 1000 ' Simplified calculation
		OnPayCalculated(amount) ' Call the partial method
	End Sub
End Class

' File 2: Employee_Events.cs
Partial Public Class Employee
	' Implementation of the partial method
	Private Sub OnPayCalculated(ByVal amount As Double)
		Console.WriteLine($"Pay calculated: {amount}")
	End Sub
End Class
$vbLabelText   $csharpLabel

部分メソッドの高度な利用

部分デフィニションアプローチを体現する部分メソッドは、部分クラスの1 つの部分に宣言し、もう1 つの部分に任意の実装を許可します。 この機能は、開発者が任意に実装できるフックを生成されたコードに提供するのに特に便利です。 部分キーワードは、メソッドが実装される場合とされない場合があることを示します。

UIコンポーネントが、ユーザーインターフェイスコントロールがロードされる前に何かアクションを実行する必要がある例を考えてみましょう。 部分メソッドは、カスタムビジネスロジックを自動生成コードに煩わしくせずに挿入するクリーンな方法を提供します。

// File: UIControls_AutoGenerated.cs
public partial class UIControls
{
    // Declaration of a partial method for control loading
    partial void OnControlLoading();

    public void LoadControl()
    {
        OnControlLoading(); // Call the partial method
        // Auto-generated loading logic here
    }
}

// File: UIControls_CustomLogic.cs
public partial class UIControls
{
    // Implementation of the partial method for adding custom logic
    partial void OnControlLoading()
    {
        // Custom business logic code here
        Console.WriteLine("Custom control loading logic executed.");
    }
}
// File: UIControls_AutoGenerated.cs
public partial class UIControls
{
    // Declaration of a partial method for control loading
    partial void OnControlLoading();

    public void LoadControl()
    {
        OnControlLoading(); // Call the partial method
        // Auto-generated loading logic here
    }
}

// File: UIControls_CustomLogic.cs
public partial class UIControls
{
    // Implementation of the partial method for adding custom logic
    partial void OnControlLoading()
    {
        // Custom business logic code here
        Console.WriteLine("Custom control loading logic executed.");
    }
}
' File: UIControls_AutoGenerated.cs
Partial Public Class UIControls
	' Declaration of a partial method for control loading
	Partial Private Sub OnControlLoading()
	End Sub

	Public Sub LoadControl()
		OnControlLoading() ' Call the partial method
		' Auto-generated loading logic here
	End Sub
End Class

' File: UIControls_CustomLogic.cs
Partial Public Class UIControls
	' Implementation of the partial method for adding custom logic
	Private Sub OnControlLoading()
		' Custom business logic code here
		Console.WriteLine("Custom control loading logic executed.")
	End Sub
End Class
$vbLabelText   $csharpLabel

部分クラスを用いてビジネスロジックを統合する

ビジネスロジックは、自動生成されたものを超えて、特に複雑なルールまたは動作を持つアプリケーションでの変更と拡張を必要とすることがよくあります。 部分クラスは、ビジネスロジックを別のソースファイルに含め、自動生成されたUIまたはデータアクセスコードを変更しないシームレスな方法を提供します。 この分離により、ビジネスロジックが開発者によって簡単にアクセスおよび変更できるようになり、特に複数の開発者がプロジェクトに取り組んでいる場合にコラボレーションを向上させます。

// File: Employee_AutoGenerated.cs
public partial class Employee
{
    // Auto-generated properties and methods
}

// File: Employee_BusinessLogic.cs
public partial class Employee
{
    // Business logic method for promoting an employee
    public void Promote()
    {
        // Business logic code to promote an employee
        Console.WriteLine("Employee promoted.");
    }
}
// File: Employee_AutoGenerated.cs
public partial class Employee
{
    // Auto-generated properties and methods
}

// File: Employee_BusinessLogic.cs
public partial class Employee
{
    // Business logic method for promoting an employee
    public void Promote()
    {
        // Business logic code to promote an employee
        Console.WriteLine("Employee promoted.");
    }
}
' File: Employee_AutoGenerated.cs
Partial Public Class Employee
	' Auto-generated properties and methods
End Class

' File: Employee_BusinessLogic.cs
Partial Public Class Employee
	' Business logic method for promoting an employee
	Public Sub Promote()
		' Business logic code to promote an employee
		Console.WriteLine("Employee promoted.")
	End Sub
End Class
$vbLabelText   $csharpLabel

部分型のネスト

ネストされた部分型は、部分クラスの概念をネストされたクラスに拡張し、ネストされたクラスの一部を別々のファイルで定義できるようにします。 これは、大規模なネスト構造を整理するのに特に役立ちます。たとえば、コントロールの動作のさまざまな側面を処理するための複数のネスト型を含む複雑なユーザーインターフェースコントロール定義などです。

// File: ComplexControl_Part1.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for initializing the nested control
        public void Initialize() 
        { 
            // Initialization code here 
        }
    }
}

// File: ComplexControl_Part2.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for cleaning up the nested control
        public void Cleanup() 
        { 
            // Cleanup code here 
        }
    }
}
// File: ComplexControl_Part1.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for initializing the nested control
        public void Initialize() 
        { 
            // Initialization code here 
        }
    }
}

// File: ComplexControl_Part2.cs
public partial class ComplexControl
{
    public partial class NestedControl
    {
        // Method for cleaning up the nested control
        public void Cleanup() 
        { 
            // Cleanup code here 
        }
    }
}
' File: ComplexControl_Part1.cs
Partial Public Class ComplexControl
	Partial Public Class NestedControl
		' Method for initializing the nested control
		Public Sub Initialize()
			' Initialization code here 
		End Sub
	End Class
End Class

' File: ComplexControl_Part2.cs
Partial Public Class ComplexControl
	Partial Public Class NestedControl
		' Method for cleaning up the nested control
		Public Sub Cleanup()
			' Cleanup code here 
		End Sub
	End Class
End Class
$vbLabelText   $csharpLabel

実用的な応用

部分クラスは、Visual Studio が Windows フォームを作成するフォームなどの自動生成されたソースコードを含む状況で特に有益です。 このセットアップにより、開発者はUIデザインコードを別のソースファイルに分け、元のUIデザインに影響を与えずにクラスを拡張または変更することができます。

Webアプリケーションでは、部分クラスを使用すると、生成されたWebサービスラップコードとカスタムビジネスロジックを分離することができ、Webサービスの更新がカスタム変更を上書きしないようにします。 同様に、LINQ to SQL を使用するアプリケーションでは、dbmlファイルが部分クラスの定義を生成し、自動生成コードに触れずに追加の機能またはビジネスロジックを含めることができます。

// Auto-generated UI class
public partial class MainForm : Form
{
    // Designer code
}

// Custom logic for MainForm
public partial class MainForm
{
    // Custom event handlers and methods
}
// Auto-generated UI class
public partial class MainForm : Form
{
    // Designer code
}

// Custom logic for MainForm
public partial class MainForm
{
    // Custom event handlers and methods
}
' Auto-generated UI class
Partial Public Class MainForm
	Inherits Form

	' Designer code
End Class

' Custom logic for MainForm
Partial Public Class MainForm
	Inherits Form

	' Custom event handlers and methods
End Class
$vbLabelText   $csharpLabel

IronPDF: C# PDFライブラリ

C# Partial (How It Works For Developers): Figure 1 - IronPDF

IronPDFは、.NET向けの包括的なライブラリで、開発者がアプリケーション内でPDFドキュメントを作成、読み取り、編集することを可能にします。 IronPDFを使用してHTML、URL、画像、ASPX、テキストからPDFを生成する簡単なアプローチを提供し、レポート、ドキュメント生成、Webコンテンツのアーカイブにおいて多様なツールとなります。 IronPDFは、その使い易さにおいて卓越しており、C#で開発されたアプリケーションを含む任意の .NETプロジェクトに統合するために最小限のセットアップを必要とします。

部分クラスとIronPDFの統合

IronPDFと部分クラスの統合を説明するために、PDF形式でレポートを生成するWebアプリケーションの例を考えてみましょう。 ビジネスロジックをPDF生成ロジックから分けるために、機能性を部分クラスファイルで分割します。

IronPDFのセットアップ

まず、IronPDFがプロジェクトに追加されていることを確認します。 これは通常、NuGetパッケージマネージャーを使用したコマンドで行うことができます:

Install-Package IronPdf

レポート生成用に部分クラスを作成する

クラスを2つの部分に分割します: レポートデータに関連するビジネスロジック用の部分とIronPDFを使用してPDFを生成する部分です。

ファイル1: ReportGenerator_BusinessLogic.cs

このファイルには、レポートデータの準備のためのビジネスロジックが含まれています。

public partial class ReportGenerator
{
    // Method to get data for the report
    public IEnumerable<string> GetDataForReport()
    {
        // Imagine this method fetches and prepares data for the report
        return new List<string> { "Data1", "Data2", "Data3" };
    }
}
public partial class ReportGenerator
{
    // Method to get data for the report
    public IEnumerable<string> GetDataForReport()
    {
        // Imagine this method fetches and prepares data for the report
        return new List<string> { "Data1", "Data2", "Data3" };
    }
}
Partial Public Class ReportGenerator
	' Method to get data for the report
	Public Function GetDataForReport() As IEnumerable(Of String)
		' Imagine this method fetches and prepares data for the report
		Return New List(Of String) From {"Data1", "Data2", "Data3"}
	End Function
End Class
$vbLabelText   $csharpLabel

ファイル2: ReportGenerator_PdfGeneration.cs

このファイルは、準備されたデータからPDFレポートを生成するためにIronPDFを利用します。

public partial class ReportGenerator
{
    // Method to generate PDF report using IronPDF
    public void GeneratePdfReport()
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var data = GetDataForReport();
        var htmlContent = $"<html><body><h1>Report</h1><p>{string.Join("</p><p>", data)}</p></body></html>";

        // Generate PDF from HTML string
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        pdf.SaveAs("Report.pdf");
        Console.WriteLine("Report generated successfully.");
    }
}
public partial class ReportGenerator
{
    // Method to generate PDF report using IronPDF
    public void GeneratePdfReport()
    {
        var renderer = new IronPdf.ChromePdfRenderer();
        var data = GetDataForReport();
        var htmlContent = $"<html><body><h1>Report</h1><p>{string.Join("</p><p>", data)}</p></body></html>";

        // Generate PDF from HTML string
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);

        // Save the PDF to a file
        pdf.SaveAs("Report.pdf");
        Console.WriteLine("Report generated successfully.");
    }
}
Partial Public Class ReportGenerator
	' Method to generate PDF report using IronPDF
	Public Sub GeneratePdfReport()
		Dim renderer = New IronPdf.ChromePdfRenderer()
		Dim data = GetDataForReport()
		Dim htmlContent = $"<html><body><h1>Report</h1><p>{String.Join("</p><p>", data)}</p></body></html>"

		' Generate PDF from HTML string
		Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)

		' Save the PDF to a file
		pdf.SaveAs("Report.pdf")
		Console.WriteLine("Report generated successfully.")
	End Sub
End Class
$vbLabelText   $csharpLabel

使用法

部分クラス設定により、PDFレポートを生成することは、ReportGeneratorクラスのインスタンスでGeneratePdfReportメソッドを呼び出すことに過ぎません。

var reportGenerator = new ReportGenerator();
reportGenerator.GeneratePdfReport();
var reportGenerator = new ReportGenerator();
reportGenerator.GeneratePdfReport();
Dim reportGenerator As New ReportGenerator()
reportGenerator.GeneratePdfReport()
$vbLabelText   $csharpLabel

C# Partial (How It Works For Developers): Figure 2 - PDF Report Output

結論

C# Partial (How It Works For Developers): Figure 3 - Licensing

C#の部分クラス、部分メソッド、およびネストされた部分型の使用は、コードの組織と管理において柔軟で強力なツールを開発者に提供します。 自動生成コードからビジネスロジック、ユーザーインターフェイスコントロールの定義、その他のアプリケーションの部分を分離することで、より保守性が高く、読みやすく、スケーラブルなアプリケーションを作成できます。

ビジネスロジックとPDF処理の関心を分けることで、開発者はより良いコードの組織、保守性、およびスケーラビリティを実現できます。 IronPDFの強力な機能と部分クラスの組織上の利点を組み合わせることで、PDFを扱う.NET開発者にとって強力なツールセットを作成します。 IronPDFの無料トライアルを使用して無料でIronPDFを試すことができます。 購入に興味がある場合、IronPDFのライセンスは$799から始まります。

よくある質問

C#で部分クラスを使用する目的は何ですか?

C#の部分クラスは、クラス、インターフェイス、または構造体の定義を複数のファイルに分割するために使用されます。これは特に、UI コントロールなどの自動生成されたコードをカスタムビジネスロジックから分離するのに便利で、コード管理と整理を強化します。

部分クラスは Web アプリケーションでどのように役立ちますか?

Webアプリケーションでは、部分クラスを使用してUIデザインコードをカスタムビジネスロジックから分離できます。この分離により、クリーンなコードアーキテクチャが維持され、アプリケーションの成長に伴って管理と拡張が容易になります。

C#でのpartialキーワードの重要性は何ですか?

C# のpartial キーワードは、クラス、インターフェイス、または構造体の定義が異なるファイルの複数の部分に分割されていることを示します。この機能は、自動生成コードを扱う際に特に、大規模なコードベースを管理するために重要です。

C#で部分クラスを使用してPDF生成を統合できますか?

はい、C#で部分クラスを使用してPDF生成を統合できます。IronPDFのようなライブラリを使用することで、PDF生成ロジックを部分クラスに分割し、他のビジネスロジックとは別に保つことで、コードの明確さを向上させることができます。

部分クラス内で部分メソッドはどのように機能しますか?

部分クラス内の部分メソッドは、クラスの一部で実装なしで宣言され、他の部分でオプションで実装できます。部分メソッドが宣言されているが実装されていない場合、コンパイル時に削除され、パフォーマンスへの負担を回避します。

ネストされた部分型とは何ですか、それらの使用例は何ですか?

ネストされた部分型は、ネストされたクラスの一部を別のファイルに定義することを可能にします。この整理ツールは、複数のネストされた型を持つユーザーインターフェイスコントロールなどの複雑な構造を管理するのに役立ち、コード管理を改善します。

.NETライブラリのPDF機能をどのようにインストールできますか?

IronPDFのようなPDF機能を備えた.NETライブラリは、NuGetパッケージマネージャーを使用してインストールできます。パッケージに特有のコマンドを使用します。例えば:Install-Package IronPdf

部分クラスを使用することの共同開発への利点は何ですか?

部分クラスは、同じクラスの異なる部分に複数の開発者がコードの競合なしに取り組むことを可能にすることによって、共同開発を促進します。これをクラスを異なるファイルに分割することによって達成し、同時修正の管理を容易にします。

C#プロジェクト内でのPDF生成ロジックをどのように整理できますか?

部分クラスを使用してPDF生成ロジックを他のビジネスロジックから分離することにより、C#プロジェクトでこれを整理できます。このアプローチは、PDFの作成や操作にIronPDFなどのライブラリを活用する際に、特にコードの管理性と明確さを改善します。

なぜ自動生成されたコードに部分クラスが役に立つのですか?

部分クラスは、自動生成コードにカスタムロジックを追加することを可能にするため、特に役立ちます。これにより、自動生成コードの更新によってカスタム実装が妨げられないことが保証されます。

Curtis Chau
テクニカルライター

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

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