.NETヘルプ C# Generics(開発者向けの動作方法) Curtis Chau 更新日:7月 28, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article C# のジェネリックは、管理するデータの型をパラメーターとして指定できるクラス、メソッド、インターフェース、およびデリゲートを設計するための方法を導入します。 この概念は、ジェネリック型パラメーターとして知られており、柔軟で再利用可能なコードコンポーネントの作成を可能にします。 ジェネリックスを使用することで、コードの再利用性、型の安全性、およびパフォーマンスを最大化できます。 たとえば、ジェネリッククラスは一度定義され、さまざまなデータ型でインスタンス化されることができます。これにより、柔軟性と型の整合性が提供されます。 この記事では、C# ジェネリックの基本とPDF 操作のための IronPDF ライブラリ機能について学びます。 ジェネリッククラスの基本 C# のジェネリッククラスは、それが含むまたは操作する型のプレースホルダーを持つクラスを作成するための設計図です。 このプレースホルダーは通常Tで表され、クラスのインスタンス化時に指定される型パラメーターを表します。 型パラメーターTを持つジェネリッククラスを作成して、さまざまなデータ型を処理できます。特に、リスト、キュー、ハッシュテーブルなどのコレクションクラスにとってジェネリッククラスは有用であり、あらゆるデータ型を保持しながら型の安全性を確保し、キャストの必要性を減らします。 ジェネリッククラスの簡単な例 任意のタイプの値を格納するように設計されたBoxという名前のジェネリッククラスを考えてみましょう。 public class Box<T> { private T data; public Box(T data) { this.data = data; } public T Data { get { return data; } } } public class Box<T> { private T data; public Box(T data) { this.data = data; } public T Data { get { return data; } } } Public Class Box(Of T) 'INSTANT VB NOTE: The field data was renamed since Visual Basic does not allow fields to have the same name as other class members: Private data_Conflict As T Public Sub New(ByVal data As T) Me.data_Conflict = data End Sub Public ReadOnly Property Data() As T Get Return data_Conflict End Get End Property End Class $vbLabelText $csharpLabel このクラスを使用するには、Tの実際の型を指定してインスタンスを作成します。 Box<int> integerBox = new Box<int>(123); Box<string> stringBox = new Box<string>("Hello"); Box<int> integerBox = new Box<int>(123); Box<string> stringBox = new Box<string>("Hello"); Dim integerBox As New Box(Of Integer)(123) Dim stringBox As New Box(Of String)("Hello") $vbLabelText $csharpLabel このコードは、単一のクラス (Box) が異なるデータ型 (int, string) を格納するために適応できる方法を説明し、ジェネリックスのコード再利用と型の安全性の強力さを示しています。 ジェネリックメソッドの実装 ジェネリックメソッドは、型パラメーターをメソッドレベルで定義する点でジェネリッククラスに似ています。 これは、非ジェネリッククラスまたはジェネリッククラスで定義され、異なる型で操作するメソッドを作成することを可能にします。 ジェネリックメソッドの例 任意の型の配列内の2つの要素を交換するメソッドを以下に示します。 public class Utility { // Swaps two elements by reference using generics public static void Swap<T>(ref T lhs, ref T rhs) { T temp = lhs; // Store lhs in a temporary variable lhs = rhs; // Assign rhs to lhs rhs = temp; // Assign temp (original lhs) to rhs } } public class Utility { // Swaps two elements by reference using generics public static void Swap<T>(ref T lhs, ref T rhs) { T temp = lhs; // Store lhs in a temporary variable lhs = rhs; // Assign rhs to lhs rhs = temp; // Assign temp (original lhs) to rhs } } Public Class Utility ' Swaps two elements by reference using generics Public Shared Sub Swap(Of T)(ByRef lhs As T, ByRef rhs As T) Dim temp As T = lhs ' Store lhs in a temporary variable lhs = rhs ' Assign rhs to lhs rhs = temp ' Assign temp (original lhs) to rhs End Sub End Class $vbLabelText $csharpLabel 上記のメソッドの使用法は次のようになります。 int a = 1, b = 2; Utility.Swap<int>(ref a, ref b); string first = "world", second = "hello"; Utility.Swap(ref first, ref second); int a = 1, b = 2; Utility.Swap<int>(ref a, ref b); string first = "world", second = "hello"; Utility.Swap(ref first, ref second); Dim a As Integer = 1, b As Integer = 2 Utility.Swap(Of Integer)(a, b) Dim first As String = "world", second As String = "hello" Utility.Swap(first, second) $vbLabelText $csharpLabel ジェネリックインターフェースとデリゲートの探索 ジェネリックインターフェースとデリゲートは、任意の型で動作する契約やコールバックメソッドを定義することを可能にします。 ジェネリックインターフェースを実装したり、ジェネリックデリゲートをクラスやメソッドで使用したりすることで、柔軟性とコードの再利用性を向上させます。 ジェネリックインターフェースの例 データアクセス操作のためのジェネリックリポジトリインターフェイスは、次のようになるかもしれません。 public interface IRepository<T> { void Add(T item); T GetById(int id); IEnumerable<T> GetAll(); } public interface IRepository<T> { void Add(T item); T GetById(int id); IEnumerable<T> GetAll(); } Public Interface IRepository(Of T) Sub Add(ByVal item As T) Function GetById(ByVal id As Integer) As T Function GetAll() As IEnumerable(Of T) End Interface $vbLabelText $csharpLabel このインターフェースは、特定のデータ型を扱うために任意のクラスで実装でき、異なるタイプにわたって一貫したデータアクセスパターンを可能にします。 ジェネリックデリゲートの例 ジェネリックデリゲートは、型安全のコールバックを定義するために使用できます。 public delegate void Action<T>(T item); public delegate void Action<T>(T item); Public Delegate Sub Action(Of T)(ByVal item As T) $vbLabelText $csharpLabel ジェネリックコレクションの活用 ジェネリックコレクションクラス、たとえば List、Dictionary<TKey, TValue>、および System.Collections.Generic ネームスペースの他のクラスは、任意の特定の型のデータを保存および操作するための型安全で効率的なコレクションを提供します。 これらのコレクションは非ジェネリックものに比べて優れており、キャストの必要性を排除し、実行時のエラーを減少させます。 List<string> names = new List<string>(); names.Add("Alice"); names.Add("Bob"); Dictionary<int, string> keyValuePairs = new Dictionary<int, string>(); keyValuePairs.Add(1, "One"); keyValuePairs.Add(2, "Two"); List<string> names = new List<string>(); names.Add("Alice"); names.Add("Bob"); Dictionary<int, string> keyValuePairs = new Dictionary<int, string>(); keyValuePairs.Add(1, "One"); keyValuePairs.Add(2, "Two"); Dim names As New List(Of String)() names.Add("Alice") names.Add("Bob") Dim keyValuePairs As New Dictionary(Of Integer, String)() keyValuePairs.Add(1, "One") keyValuePairs.Add(2, "Two") $vbLabelText $csharpLabel カスタムジェネリックタイプの作成 組み込みのジェネリックタイプの使用を超えて、あなた自身のものを作成することで、異なるデータ型全体に共通するが型特有に扱う必要がある操作をカプセル化できます。 このアプローチは、異なるデータ型で使用されるライブラリ、フレームワーク、またはユーティリティを構築するために特に有用です。 カスタムジェネリックタイプの例 操作の結果と成功フラグおよびオプションのメッセージをカプセル化するジェネリック Result クラスを考えてみましょう。 public class Result<T> { public bool Success { get; private set; } public T Data { get; private set; } public string Message { get; private set; } public Result(bool success, T data, string message = "") { Success = success; Data = data; Message = message; } } public class Result<T> { public bool Success { get; private set; } public T Data { get; private set; } public string Message { get; private set; } public Result(bool success, T data, string message = "") { Success = success; Data = data; Message = message; } } Public Class Result(Of T) Private privateSuccess As Boolean Public Property Success() As Boolean Get Return privateSuccess End Get Private Set(ByVal value As Boolean) privateSuccess = value End Set End Property Private privateData As T Public Property Data() As T Get Return privateData End Get Private Set(ByVal value As T) privateData = value End Set End Property Private privateMessage As String Public Property Message() As String Get Return privateMessage End Get Private Set(ByVal value As String) privateMessage = value End Set End Property Public Sub New(ByVal success As Boolean, ByVal data As T, Optional ByVal message As String = "") Me.Success = success Me.Data = data Me.Message = message End Sub End Class $vbLabelText $csharpLabel IronPDF: C# PDF ライブラリ IronPDF は、.NET 開発者がアプリケーション内で PDF ドキュメントを作成、編集、および抽出するために設計された包括的なライブラリです。 IronPDF は、HTML から PDF を生成し、既存の PDF を編集し、PDF を画像に変換するなどの助けをします。 IronPDF 自体はジェネリックスに基づいていませんが、このライブラリと C# 環境でどのように相互作用するかを理解することで、アプリケーションのドキュメント管理機能を大幅に向上させることができます。 IronPDF と仮想キーワードを使用したコード例 ここでジェネリックスを使用する考え方は、任意の HTML 文字列から PDF を生成するための再利用可能なメソッドを作成することです。 このメソッドはジェネリックであり、必要に応じて異なるタイプのメタデータまたは設定を指定することができます。 まず、私たちの PDF 生成オプションを保持するシンプルなジェネリッククラスを定義しましょう。 このクラスはデモンストレーションの目的のために基本的なものですが、必要に応じてより多くのプロパティでそれを拡張できます。 public class PdfOptions<T> { public T Metadata { get; set; } public string HtmlContent { get; set; } } public class PdfOptions<T> { public T Metadata { get; set; } public string HtmlContent { get; set; } } Public Class PdfOptions(Of T) Public Property Metadata() As T Public Property HtmlContent() As String End Class $vbLabelText $csharpLabel 次に、IronPDF を使用して PDF を生成するための静的メソッドを作成し、PdfOptions クラスを活用します。 このメソッドは、パラメーターとして PdfOptions のインスタンスを受け取り、ジェネリックスの実際の使用を示します。 using IronPdf; // Make sure to include the necessary namespace for IronPDF public static class PdfGenerator { // Generates a PDF from provided HTML content and options public static void GeneratePdf<T>(PdfOptions<T> options) { // Initialize the IronPDF HtmlToPdf renderer var renderer = new ChromePdfRenderer(); // Optional: Apply any renderer options here, for example, setting the paper size renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; // Generate the PDF from HTML content var pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent); // Optional: Here, you can use options.Metadata in some way, depending on your generic type T // For simplicity, we're just printing the metadata to console if it's of type string if (options.Metadata is string metadataString) { Console.WriteLine($"Metadata: {metadataString}"); } // Save the PDF to a file var fileName = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf"; pdfDocument.SaveAs(fileName); Console.WriteLine($"PDF generated and saved as {fileName}"); } } using IronPdf; // Make sure to include the necessary namespace for IronPDF public static class PdfGenerator { // Generates a PDF from provided HTML content and options public static void GeneratePdf<T>(PdfOptions<T> options) { // Initialize the IronPDF HtmlToPdf renderer var renderer = new ChromePdfRenderer(); // Optional: Apply any renderer options here, for example, setting the paper size renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4; // Generate the PDF from HTML content var pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent); // Optional: Here, you can use options.Metadata in some way, depending on your generic type T // For simplicity, we're just printing the metadata to console if it's of type string if (options.Metadata is string metadataString) { Console.WriteLine($"Metadata: {metadataString}"); } // Save the PDF to a file var fileName = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf"; pdfDocument.SaveAs(fileName); Console.WriteLine($"PDF generated and saved as {fileName}"); } } Imports IronPdf ' Make sure to include the necessary namespace for IronPDF Public Module PdfGenerator ' Generates a PDF from provided HTML content and options Public Sub GeneratePdf(Of T)(ByVal options As PdfOptions(Of T)) ' Initialize the IronPDF HtmlToPdf renderer Dim renderer = New ChromePdfRenderer() ' Optional: Apply any renderer options here, for example, setting the paper size renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4 ' Generate the PDF from HTML content Dim pdfDocument = renderer.RenderHtmlAsPdf(options.HtmlContent) ' Optional: Here, you can use options.Metadata in some way, depending on your generic type T ' For simplicity, we're just printing the metadata to console if it's of type string Dim tempVar As Boolean = TypeOf options.Metadata Is String Dim metadataString As String = If(tempVar, CStr(options.Metadata), Nothing) If tempVar Then Console.WriteLine($"Metadata: {metadataString}") End If ' Save the PDF to a file Dim fileName = $"GeneratedPdf_{DateTime.Now.Ticks}.pdf" pdfDocument.SaveAs(fileName) Console.WriteLine($"PDF generated and saved as {fileName}") End Sub End Module $vbLabelText $csharpLabel 最後に、PdfGenerator クラスを使用して PDF ドキュメントを生成しましょう。 この例において、Metadata プロパティはタイトルや関連と思われるその他の情報を含む文字列となるかもしれません。 class Program { static void Main(string[] args) { // Set the license key for IronPDF if needed License.LicenseKey = "Your-License-Key-Here"; // Create PDF options with HTML content and metadata var options = new PdfOptions<string> { HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>", Metadata = "Test PDF Title" }; // Generate the PDF using the specified options PdfGenerator.GeneratePdf(options); } } class Program { static void Main(string[] args) { // Set the license key for IronPDF if needed License.LicenseKey = "Your-License-Key-Here"; // Create PDF options with HTML content and metadata var options = new PdfOptions<string> { HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>", Metadata = "Test PDF Title" }; // Generate the PDF using the specified options PdfGenerator.GeneratePdf(options); } } Friend Class Program Shared Sub Main(ByVal args() As String) ' Set the license key for IronPDF if needed License.LicenseKey = "Your-License-Key-Here" ' Create PDF options with HTML content and metadata Dim options = New PdfOptions(Of String) With { .HtmlContent = "<h1>Hello, World!</h1><p>This is a test PDF document generated from HTML.</p>", .Metadata = "Test PDF Title" } ' Generate the PDF using the specified options PdfGenerator.GeneratePdf(options) End Sub End Class $vbLabelText $csharpLabel この例は、IronPDF を C# ジェネリンクスと統合し、HTML コンテンツから PDF を生成する柔軟な方法を提供し、ジェネリック PdfOptions クラスを通じてカスタマイズ可能なメタデータや設定を可能にしています。 これに関しては、アプリケーションに必要なより洗練されたオプションやレンダラー設定を追加することで拡張することができます。 結論 C# のジェネリックスは、高品質で再利用可能で型安全なコードを開発するための強力なツールです。 ジェネリッククラス、メソッド、インターフェース、およびデリゲートを理解し適用することで、より適応性があり、保守が容易なコードを記述できます。 ジェネリックスは、異なるデータタイプにわたるコードの再利用を可能にするだけでなく、コンパイル時の型チェックを保証し、実行時のエラーを減少させ、全体的なコードの品質を向上させます。 IronPDF はその PDF ライブラリツールの無料試用版を提供しており、費用は$799からです。 よくある質問 C#のジェネリックとは何ですか? C# ジェネリックは、型パラメーターを持つクラス、メソッド、インターフェース、デリゲートを設計する方法を導入します。これにより、型安全性とパフォーマンス改善を提供する柔軟で再利用可能なコードコンポーネントを作成できます。 C# におけるジェネリッククラスはどのように機能しますか? C# のジェネリッククラスは、通常 T と表される型パラメーターを使用し、含まれるまたは操作される型のプレースホルダーとして機能します。これにより、型安全性を維持しつつ、さまざまなデータ型でクラスをインスタンス化できます。 C# のジェネリッククラスの例を教えてください。 はい、簡単な例として、任意の型の値を格納する Box クラスがあります。Box や Box のようにインスタンスを作成して、同じクラスを使用して異なるデータ型を格納できます。 C# のジェネリックメソッドとは何ですか? ジェネリックメソッドは、メソッドレベルで型パラメータを定義し、さまざまな型で操作できるようにするものです。非ジェネリッククラスまたはジェネリッククラスの一部として使用でき、メソッド設計に柔軟性を提供します。 C#でジェネリックインターフェースとデリゲートはどのように使用できますか? ジェネリックインターフェースとデリゲートは、任意の型で動作する契約とコールバックメソッドを定義でき、柔軟性とコードの再利用性を高めます。 C# のジェネリックコレクションを使用する利点は何ですか? List や Dictionary などのジェネリックコレクションは、特定の型に対して型安全で効率的なストレージを提供し、キャストを排除し、ランタイムエラーを減少させます。 C# でカスタムジェネリック型を作成するにはどうすればよいですか? 異なるデータ型にわたって共通の操作をカプセル化するために、型特有の方法で扱うカスタムジェネリック型を作成できます。ライブラリやユーティリティの構築に役立ちます。 C#ジェネリックは .NET のPDF生成をどのように改善できますか? C#のジェネリックをPDFライブラリと共に使用して、柔軟で再利用可能なコンポーネントを作成できます。たとえば、PdfOptions クラスを使用してPDF生成オプションを保持することで、ジェネリックのPDFタスクへの適応性を示します。 C#ジェネリックをPDFライブラリでどのように利用しますか? IronPDFのようなPDFライブラリは、C#ジェネリックを使用してその機能強化できます。たとえば、HTMLをPDFに変換するジェネリックメソッドを使用でき、文書生成に対して柔軟なアプローチを提供します。 C# ジェネリックを使用する利点は何ですか? C#ジェネリックは異なるデータ型にわたってコードを再利用し、コンパイル時の型チェックを保証し、ランタイムエラーを減少させ、全体的なコード品質を向上させます。適応性がありメンテナブルなコードを書くことができます。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# String.Join(開発者向けの動作方法)C# Virtual Keyword(開発者向...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む