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

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

このチュートリアルでは、C# ActionFunc デリゲート、および関連トピックのコンセプトを教えます。 このガイドは初心者向けに設計されており、基本を解説し、例を提供し、action delegateの重要な用語を説明します。

まず、C#のデリゲートとは何かを理解することから始めましょう。 記事の後半でIronPDFライブラリを探ります。

C#におけるデリゲートの理解

デリゲートは、特定のパラメーターセットと戻り値の型で定義されるメソッドへの参照として機能し、事前定義されたデリゲートタイプなどの機能をカプセル化し、メソッドが値を返すことを可能にするプログラミング構造です。

それはメソッドを引数として渡すことができます。 本質的に、デリゲートは関数ポインタとして機能し、それが表すメソッドを指します。 C#では、広く使用される2つの事前定義されたデリゲートタイプがあり、それがFuncActionです。

Func デリゲートとは?

Funcデリゲートは、戻り値を持つことができるメソッドを表します。 最後の型パラメーターは戻り値の型を指定し、先行する型は入力パラメーターを指定します。

たとえば、Func<int, int, string>は2つの整数パラメーターを受け取り、文字列メッセージを返します。

実践におけるデリゲート: 例

C#においてFuncおよびActionデリゲートがどのように機能するかを理解するために、いくつかの例を見てみましょう。

Action デリゲートの例

値を具体的に返さないメソッドの実行を希望する場合、操作に焦点を当てた事前定義のデリゲートタイプであるActionデリゲートが使用されます。 ここに基本的な例があります:

Action<string> display = message => Console.WriteLine(message);
display("Hello, World!");
Action<string> display = message => Console.WriteLine(message);
display("Hello, World!");
Dim display As Action(Of String) = Sub(message) Console.WriteLine(message)
display("Hello, World!")
$vbLabelText   $csharpLabel

このコードは、1つの文字列パラメーターを取り、それをコンソールに出力する匿名メソッドを用いたActionデリゲートの使用を示しています。 =>シンボルは、無名メソッドを書くための簡潔な方法であるラムダ式を定義するために使用されます。

Func デリゲートの例

値を返すFuncデリゲートは次のように使用することができます:

Func<int, int, int> add = (x, y) => x + y;
int result = add(5, 3);
Console.WriteLine(result);
Func<int, int, int> add = (x, y) => x + y;
int result = add(5, 3);
Console.WriteLine(result);
Dim add As Func(Of Integer, Integer, Integer) = Function(x, y) x + y
Dim result As Integer = add(5, 3)
Console.WriteLine(result)
$vbLabelText   $csharpLabel

この例では、2つの整数パラメーターを取り、その合計を返すFuncデリゲートを作成します。 合計はこのようにコンソールに表示されます:

C# Action (開発者向けの使い方): 図1

主要な概念

無名メソッド

C#における無名メソッドは、名前なしでインラインメソッドを定義する方法を提供します。 しばしばデリゲートと共に使用され、直接デリゲートインスタンスを作成します。

ラムダ式

ラムダ式は無名メソッドを書くための省略形です。 同じ結果を達成しつつ、少ないコードを書くことができます。

ジェネリックデリゲート

ジェネリックデリゲートはどんなデータ型でも扱うことができます。 FuncActionはジェネリックデリゲートの例で、実行時に入出力タイプを指定することにより、より多くの柔軟性を提供します。

デリゲートインスタンス

newキーワードでまたは単にデリゲートのシグネチャに一致するメソッドを割り当てることでデリゲートインスタンスを作成します。

System 名前空間

.NETにおけるSystem名前空間には、FuncActionのような組み込み型が含まれており、これらは基底クラスライブラリの一部です。

デリゲートを使用した非同期プログラミング

デリゲートは、ActionFuncを含め、C#における非同期タスクの管理において重要な役割を果たします。 デベロッパーが非同期に実行できるメソッドへの参照をカプセル化することを可能にします。 これは、メインのアプリケーションスレッドがタスクを開始した後、タスク完了まで他の作業を続けることを意味します。

その時点で、デリゲートによって参照されるコールバックメソッドが呼び出され、結果の処理を行います。 このパターンは、長時間実行される操作中にインタラクティブな状態を保つために、応答性の高いユーザーインターフェイスを作成するために重要です。

例: 非同期ファイル処理

大きなファイルを処理する必要があるアプリケーションを考えてみましょう。非同期プログラミングパターンであるTaskのようなものと組み合わせたActionデリゲートの使用は、アプリケーションのパフォーマンスを大幅に向上させることができます。

public async Task ProcessFileAsync(string filePath, Action<string> onComplete)
{
    // Asynchronously read file content
    string fileContent = await File.ReadAllTextAsync(filePath);
    // Process the file content here (omitted for brevity)

    // Once processing is complete, invoke the onComplete callback
    onComplete?.Invoke("File processing completed successfully.");
}
public async Task ProcessFileAsync(string filePath, Action<string> onComplete)
{
    // Asynchronously read file content
    string fileContent = await File.ReadAllTextAsync(filePath);
    // Process the file content here (omitted for brevity)

    // Once processing is complete, invoke the onComplete callback
    onComplete?.Invoke("File processing completed successfully.");
}
Public Async Function ProcessFileAsync(ByVal filePath As String, ByVal onComplete As Action(Of String)) As Task
	' Asynchronously read file content
	Dim fileContent As String = Await File.ReadAllTextAsync(filePath)
	' Process the file content here (omitted for brevity)

	' Once processing is complete, invoke the onComplete callback
	If onComplete IsNot Nothing Then
		onComplete.Invoke("File processing completed successfully.")
	End If
End Function
$vbLabelText   $csharpLabel

この例では、File.ReadAllTextAsyncを使用してファイルの内容を読み込み、メインスレッドをブロックしません。 ファイルが処理されたら、onCompleteというActionデリゲートが呼び出され、UIの更新や結果の記録などのさらなるアクションが可能になります。

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

IronPDFは、.NET開発者がPDFファイルを容易に作成、編集、操作するために設計された包括的なC# PDFライブラリです。 それは拡張された機能で、HTMLコンテンツ、CSS、JavaScript、および画像からピクセル完璧なPDFを保証し、Chromeベースのレンダリングエンジンで差別化されています。

IronPDFは、Windows、Linux、およびmacOSプラットフォーム全体で、.NET Standard、.NET Framework、.NET Coreを含むさまざまな.NETフレームワークおよび環境と互換性があります。

IronPDFのインストール

あなたの.NETプロジェクトにIronPDFを組み込むには、最も簡単な方法であるNuGetを使用することができます。 Visual Studioのパッケージマネージャーコンソールを開き、次のコマンドを実行するだけです。

Install-Package IronPdf

このコマンドはIronPDFパッケージを取得しインストールし、PDFの生成と操作のためにIronPDFの使用を開始するためにプロジェクトを設定します。

Action デリゲートを用いたコード例

IronPDFを使用したActionデリゲートを用い、PDF生成タスクを実行するシンプルな例です。

using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Define an Action delegate that takes HTML content as a string
        Action<string> generatePdf = html =>
        {
            // Render the HTML as a PDF
            var pdf = renderer.RenderHtmlAsPdf(html);

            // Save the PDF to a file
            pdf.SaveAs("example.pdf");
        };

        // Generate the PDF with the provided HTML
        generatePdf("<p>Hello, world!</p>");
        Console.WriteLine("PDF generated successfully.");
    }
}
using IronPdf;
using System;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // Define an Action delegate that takes HTML content as a string
        Action<string> generatePdf = html =>
        {
            // Render the HTML as a PDF
            var pdf = renderer.RenderHtmlAsPdf(html);

            // Save the PDF to a file
            pdf.SaveAs("example.pdf");
        };

        // Generate the PDF with the provided HTML
        generatePdf("<p>Hello, world!</p>");
        Console.WriteLine("PDF generated successfully.");
    }
}
Imports IronPdf
Imports System

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' Define an Action delegate that takes HTML content as a string
		Dim generatePdf As Action(Of String) = Sub(html)
			' Render the HTML as a PDF
			Dim pdf = renderer.RenderHtmlAsPdf(html)

			' Save the PDF to a file
			pdf.SaveAs("example.pdf")
		End Sub

		' Generate the PDF with the provided HTML
		generatePdf("<p>Hello, world!</p>")
		Console.WriteLine("PDF generated successfully.")
	End Sub
End Class
$vbLabelText   $csharpLabel

この例はHTML文字列を取り、それをPDFドキュメントにレンダリングするためにIronPDFを利用するActionデリゲートを定義します。 生成されたPDFはファイルシステムに保存されます。 このアプローチは、デリゲートを使用してPDF生成ロジックをカプセル化し、コードをよりモジュラーで柔軟にする方法を示しています。

C# Action (開発者向けの使い方): 図2

ライセンス

C# Action (開発者向けの使い方): 図3

IronPDFは開発者向けに、個別開発者ライセンスからエンタープライズ契約まで、様々なライセンシングオプションを提供しています。 これらのライセンスの価格は、$799から始まります。

結論

これで、C#におけるActionおよびFuncデリゲート、無名メソッドおよびラムダ式の使い方について基本的な理解が得られたはずです。 デリゲートの概念を習得するには、練習が重要です。自身の例を作成し、デリゲートを定義し、割り当て、呼び出すことを試みてください。

IronPDFの機能は試用版で自由に探求することができます。 プロジェクトの要件に適している場合は、$799から価格が開始するライセンスを取得することができます。

よくある質問

C#のアクションデリゲートとは何ですか?

C#のアクションデリゲートは、値を返さないメソッドを実行するための事前定義されたデリゲートタイプです。通常、結果が返される必要がない操作に使用されます。

C#でFuncデリゲートをどのように使用できますか?

Funcデリゲートは、値を返すメソッドをカプセル化するために使用されます。戻り値の型を最後のパラメータとして指定します。計算結果を返す必要があるメソッドに便利です。

Funcデリゲートとアクションデリゲートの違いは何ですか?

主な違いは、Funcデリゲートが値を返すのに対し、アクションデリゲートは返さないことです。Funcはメソッドが結果を返す必要がある場合に使用され、アクションは戻り値を必要としない手続きに使用されます。

C#アプリケーションでPDFをどのように作成できますか?

C#アプリケーションではIronPDFを使用してPDFを作成できます。ChromeベースのレンダリングエンジンでPDFを生成でき、デリゲートを使用して.NETアプリケーションに統合できます。

C#のラムダ式とは何で、どのようにデリゲートと関連していますか?

ラムダ式はインラインメソッドを書くための簡潔な方法で、コードを簡単化するためにデリゲートと共に使用されます。メソッドを簡潔に表現でき、アクションおよびFuncデリゲートと頻繁に使用されます。

C#でデリゲートを使って非同期タスクをどのように処理できますか?

アクションやFuncのようなデリゲートは、非同期で実行されるメソッドをカプセル化するために使用できます。このアプローチにより、タスクの完了を待つ間にアプリケーションが他の操作を行い、パフォーマンスと応答性を向上させます。

C#ライブラリを.NETプロジェクトにPDF作成用にインストールするにはどうすればよいですか?

あなたの.NETプロジェクトにIronPDFのようなライブラリをインストールするには、Package Manager ConsoleのNuGetを使用して、次のコマンドを入力します: Install-Package IronPdf。これにより、PDFの作成と操作のためにプロジェクトが準備されます。

C#における匿名メソッドとは何ですか?

匿名メソッドは名前なしでインラインメソッドを定義することを可能にし、デリゲートで直接デリゲートインスタンスを作成するためによく使用されます。コードブロックをパラメータとして渡す方法を提供します。

C#のジェネリックデリゲートとは何ですか?

ジェネリックデリゲートは、任意のデータ型を使用できるデリゲートです。FuncとActionはジェネリックデリゲートの例であり、入力および出力パラメータの型をランタイムで定義できます。

.NETにおけるSystem名前空間とは何で、その重要性は何ですか?

.NETのSystem名前空間にはFuncやActionのような基本型とクラスが含まれており、これは基盤のクラスライブラリの一部であり、C#アプリケーションの開発に必要なコア機能を提供しています。

Curtis Chau
テクニカルライター

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

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