.NETヘルプ C# Virtual Keyword(開発者向けの動作方法) 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#の仮想キーワードについて学び、IronPDFライブラリを探ります。 さっそくその動作を実際の例で見ていきましょう。 仮想メソッドの実践 仮想キーワードの基本的な使い方 基本的には、仮想メソッドは基底クラスのメソッドで、派生クラスにおいて基底クラスで定義されたメソッドに特定の実装を提供することができます。 C#の仮想キーワードはメソッド、プロパティ、またはイベントを仮想としてマークし、派生クラスでオーバーライドできるようにします。 次の例を考えてみましょう。基底クラスShapeを仮想メソッドAreaで定義します: public class Shape { public virtual double Area() { return 0; // Default implementation, returns 0 } } public class Shape { public virtual double Area() { return 0; // Default implementation, returns 0 } } Public Class Shape Public Overridable Function Area() As Double Return 0 ' Default implementation, returns 0 End Function End Class $vbLabelText $csharpLabel 仮想メソッドのオーバーライド 派生クラスはこれらの仮想メソッドをオーバーライドして、派生クラスの特定の要件に合わせた自分の実装を提供することができます。 オーバーライドキーワードを使用して、基底クラスShapeから派生したCircleクラスを作成し、その自分のバージョンのAreaメソッドを提供します: public class Circle : Shape { public double Radius { get; set; } public Circle(double radius) { Radius = radius; } public override double Area() { // Own implementation for circle area return Math.PI * Radius * Radius; } } public class Circle : Shape { public double Radius { get; set; } public Circle(double radius) { Radius = radius; } public override double Area() { // Own implementation for circle area return Math.PI * Radius * Radius; } } Public Class Circle Inherits Shape Public Property Radius() As Double Public Sub New(ByVal radius As Double) Me.Radius = radius End Sub Public Overrides Function Area() As Double ' Own implementation for circle area Return Math.PI * Radius * Radius End Function End Class $vbLabelText $csharpLabel 上記のコードでは、Circleクラスが円の面積を計算するためにAreaメソッドの具体的な実装を提供しています。 これは多態性における仮想メソッドの力を示しています。 非仮想メソッド すべてのメソッドが仮想である必要はないこと、または仮想であるべきではないことを覚えておくことが重要です。 非仮想メソッドは、派生クラスでオーバーライドできないように定義されており、最初の実装が変更されず、それを継承するすべてのクラスで利用されます。 これは、基底クラスが変更されるべきでない標準的な実装を提供するときに役立ちます。 実践的応用 これらの概念を実際のシナリオで活用してみましょう。 次のプログラムを考えてみてください。私たちのShapeとCircleクラスを使用しています: public class Program { public static void Main(string[] args) { Shape myShape = new Shape(); Shape myCircle = new Circle(5); // Display the area calculation of the default and overridden methods. Console.WriteLine($"Shape area: {myShape.Area()}"); Console.WriteLine($"Circle area: {myCircle.Area()}"); } } public class Program { public static void Main(string[] args) { Shape myShape = new Shape(); Shape myCircle = new Circle(5); // Display the area calculation of the default and overridden methods. Console.WriteLine($"Shape area: {myShape.Area()}"); Console.WriteLine($"Circle area: {myCircle.Area()}"); } } Public Class Program Public Shared Sub Main(ByVal args() As String) Dim myShape As New Shape() Dim myCircle As Shape = New Circle(5) ' Display the area calculation of the default and overridden methods. Console.WriteLine($"Shape area: {myShape.Area()}") Console.WriteLine($"Circle area: {myCircle.Area()}") End Sub End Class $vbLabelText $csharpLabel 上記のサンプルプログラムは、実際の多態性と仮想関数の本質を示しています。 myCircleがShapeとして宣言されているにもかかわらず、それは派生クラスであるCircleクラスからオーバーライドされたAreaメソッドを呼び出しています。これは、仮想キーワードとオーバーライドキーワードによって促進される動的ディスパッチメカニズムを示しています。 仮想とオーバーライドキーワードの高度な使用法 抽象メソッドとクラス 抽象メソッドはさらに一歩進んだもので、抽象クラスで使用されます。 抽象メソッドは基底クラスで実装なしに宣言され、派生クラスでオーバーライドされる必要があります。 これは、派生クラスに対して抽象メソッドの実装を提供させることで、一貫したインターフェースを確保しつつ、各派生クラスにおけるカスタマイズされた動作を許可します。 メソッドのオーバーロードとオーバーライド メソッドのオーバーロードとオーバーライドの違いを理解することも重要です。 メソッドのオーバーロードは同じクラス内で発生し、同じ名前だが異なるパラメーターを持つメソッドが複数あることを許可します。 メソッドのオーバーライドは仮想およびオーバーライドキーワードによって促進され、派生クラスが基底クラスで定義されたメソッドの異なる実装を提供できるようにします。 仮想プロパティとイベント メソッドだけでなく、プロパティとイベントも仮想にすることができます。 これにより、派生クラスがカスタムなゲッター、セッター、およびイベントハンドラーを提供することができ、クラス階層の柔軟性をさらに高めます。 IronPDF: .NET PDFライブラリ IronPDFは、C#開発者が.NETアプリケーション内でPDFドキュメントを生成、操作、レンダリングするために設計された包括的ライブラリです。 HTMLを使用してPDFを作成するなど、PDFファイルを扱うことを容易にする直感的なAPIを提供し、複雑なPDFドキュメントの基本構造を理解することなく、または外部ソフトウェアに頼ることなく、PDFを作成、編集、変換できます。 IronPDFは、仮想キーワードの使用を含む言語のオブジェクト指向機能とシームレスに統合し、カスタマイズ可能なPDF処理機能を提供します。 IronPDFで仮想キーワードを使用することで、開発者はアプリケーション内でIronPDFのクラスの機能を拡張することができます。 PDFの生成または操作に関連する仮想メソッドを持つ基底クラスを定義することで、開発者はこれらのメソッドをオーバーライドする派生クラスを作成し、PDF処理の動作を特定のニーズに合わせて調整することができます。 例: 仮想メソッドでPDFレンダリングをカスタマイズする HTML文字列からPDFをレンダリングするためにIronPDFを使用する基底クラスがあるとします。 レンダリングメソッドを仮想としてマークすることで、派生クラスがレンダリングプロセスを修正または強化できるようにします。 ここに簡単な例があります: public class BasicPdfRenderer { // Virtual method allowing customization in derived classes public virtual byte[] RenderHtmlToPdf(string htmlContent) { // Use IronPDF to render PDF from HTML var renderer = new IronPdf.ChromePdfRenderer(); var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent); return pdfDocument.BinaryData; } } public class CustomPdfRenderer : BasicPdfRenderer { // Overriding the base class method to implement custom rendering settings public override byte[] RenderHtmlToPdf(string htmlContent) { var renderer = new IronPdf.ChromePdfRenderer(); var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent); // Apply a prominent watermark to the PDF document pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center); // Return the binary data of the PDF document return pdfDocument.BinaryData; } } class Program { static void Main(string[] args) { License.LicenseKey = "License-Key"; // HTML content to be converted to PDF string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>"; // Create an instance of CustomPdfRenderer CustomPdfRenderer renderer = new CustomPdfRenderer(); // Call RenderHtmlToPdf method to generate PDF binary data byte[] pdfData = renderer.RenderHtmlToPdf(htmlContent); // Specify the file path to save the PDF string filePath = "f:\\CustomRenderedPdf.pdf"; // Save the binary data to a file File.WriteAllBytes(filePath, pdfData); // Output success message Console.WriteLine($"PDF generated and saved to {filePath}"); } } public class BasicPdfRenderer { // Virtual method allowing customization in derived classes public virtual byte[] RenderHtmlToPdf(string htmlContent) { // Use IronPDF to render PDF from HTML var renderer = new IronPdf.ChromePdfRenderer(); var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent); return pdfDocument.BinaryData; } } public class CustomPdfRenderer : BasicPdfRenderer { // Overriding the base class method to implement custom rendering settings public override byte[] RenderHtmlToPdf(string htmlContent) { var renderer = new IronPdf.ChromePdfRenderer(); var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent); // Apply a prominent watermark to the PDF document pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center); // Return the binary data of the PDF document return pdfDocument.BinaryData; } } class Program { static void Main(string[] args) { License.LicenseKey = "License-Key"; // HTML content to be converted to PDF string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>"; // Create an instance of CustomPdfRenderer CustomPdfRenderer renderer = new CustomPdfRenderer(); // Call RenderHtmlToPdf method to generate PDF binary data byte[] pdfData = renderer.RenderHtmlToPdf(htmlContent); // Specify the file path to save the PDF string filePath = "f:\\CustomRenderedPdf.pdf"; // Save the binary data to a file File.WriteAllBytes(filePath, pdfData); // Output success message Console.WriteLine($"PDF generated and saved to {filePath}"); } } Public Class BasicPdfRenderer ' Virtual method allowing customization in derived classes Public Overridable Function RenderHtmlToPdf(ByVal htmlContent As String) As Byte() ' Use IronPDF to render PDF from HTML Dim renderer = New IronPdf.ChromePdfRenderer() Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent) Return pdfDocument.BinaryData End Function End Class Public Class CustomPdfRenderer Inherits BasicPdfRenderer ' Overriding the base class method to implement custom rendering settings Public Overrides Function RenderHtmlToPdf(ByVal htmlContent As String) As Byte() Dim renderer = New IronPdf.ChromePdfRenderer() Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent) ' Apply a prominent watermark to the PDF document pdfDocument.ApplyWatermark("<h2 style='color:red; font-size: 60px; opacity: 0.5; text-shadow: 2px 2px 5px grey;'>SAMPLE</h2>", 30, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center) ' Return the binary data of the PDF document Return pdfDocument.BinaryData End Function End Class Friend Class Program Shared Sub Main(ByVal args() As String) License.LicenseKey = "License-Key" ' HTML content to be converted to PDF Dim htmlContent As String = "<h1>Hello, IronPDF!</h1><p>This is a simple PDF document generated from HTML.</p>" ' Create an instance of CustomPdfRenderer Dim renderer As New CustomPdfRenderer() ' Call RenderHtmlToPdf method to generate PDF binary data Dim pdfData() As Byte = renderer.RenderHtmlToPdf(htmlContent) ' Specify the file path to save the PDF Dim filePath As String = "f:\CustomRenderedPdf.pdf" ' Save the binary data to a file File.WriteAllBytes(filePath, pdfData) ' Output success message Console.WriteLine($"PDF generated and saved to {filePath}") End Sub End Class $vbLabelText $csharpLabel BasicPdfRenderer クラス内でIronPDFを利用して、HTMLをPDFに変換し、そのRenderHtmlToPdfメソッドを仮想としてマークし、カスタマイズを許可します。 BasicPdfRendererから派生したCustomPdfRendererクラスは、このメソッドをオーバーライドして変換を行うだけでなく、生成されたPDF全体にわたる独自の大きな赤の透かしを挿入します。 出力PDFファイル IronPDFによって生成されたPDFファイルです: 結論 C#の仮想キーワードは、多態性と動的ディスパッチを可能にするオブジェクト指向プログラミングの基礎石です。 基底クラスで定義されたメソッド、プロパティ、およびイベントの特定の実装を派生クラスが提供できるようにすることで、柔軟で再利用可能なコード構造を作成する力を開発者に与えます。 仮想メソッド、オーバーライドメカニズム、およびクラス階層の関係を理解し、実際の例を通じて、開発者はこれらの概念を効果的に活用して堅牢なアプリケーションを構築することができます。 さらに、これらの概念は開発者がアプリケーションでIronPDFをより効率的に使用できるようにもします。 IronPDFを無料で試すことができる無料のトライアルオプションを使用してみてください。 よくある質問 C# の仮想メソッドを使用して PDF のレンダリングをどのようにカスタマイズできますか? 基本クラスのメソッド、たとえばレンダリング関数を仮想としてマークすることで、PDF のレンダリングをカスタマイズできます。これにより派生クラスはメソッドをオーバーライドし、たとえば透かしを追加したりレンダリング設定を変更したりしてレンダリングプロセスを変更することができます。 仮想キーワードは PDF ドキュメント処理でどのような役割を果たしますか? 仮想キーワードは、開発者が PDF ドキュメント処理において柔軟で再利用可能なコード構造を作成することを可能にします。仮想メソッドを使用することで、開発者は PDF レンダリングの修正など、特定のアプリケーションニーズに合わせて機能を拡張およびカスタマイズすることができます。 オーバーライドメカニズムは C# の PDF 生成をどのように強化しますか? オーバーライドメカニズムによって、派生クラスは基本クラスで仮想とマークされたメソッドに対して特定の実装を提供することが可能になります。これは特に PDF 生成において有用であり、開発者はメソッドをオーバーライドすることでレイアウトの変更や追加機能の組み込みを行うことができます。 仮想メソッドは PDF 処理アプリケーションの柔軟性を向上させることができますか? はい、仮想メソッドは PDF 処理アプリケーションの柔軟性を大幅に向上させることができます。これにより、開発者はカスタマイズ可能な動作を持つ基本クラスを作成し、派生クラスが PDF 処理機能を修正または拡張できるようになります。このようにして、IronPDF のようなライブラリの潜在力を最大限に活用することができます。 PDF 操作の文脈で仮想メソッドと非仮想メソッドはどのように異なりますか? 仮想メソッドは派生クラスで独自の動作を提供するためにオーバーライドすることができます。これは特定の機能を拡張または修正する必要がある場合に PDF 操作に有用です。一方、非仮想メソッドはオーバーライドすることができず、すべての派生クラスで一貫した動作を保証します。 C# での PDF 処理における多態性の重要性は何ですか? 仮想キーワードによって促進される多態性は、実行時オブジェクト型に基づいた動的メソッド呼び出しを可能にします。これは、様々な PDF 操作タスクを効率的に処理するために柔軟で適応可能なコードを実装できるため、PDF 処理において重要です。 開発者はどのようにして C# アプリケーションでの PDF 処理機能をテストできますか? 開発者は、IronPDF などの PDF ライブラリの無料トライアルを利用して C# アプリケーションでの PDF 処理機能をテストできます。これらのトライアルを使用して、機能を探求したり、コードを試したり、アプリケーション内での PDF 処理機能の統合を評価したりすることができます。 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# Generics(開発者向けの動作方法)NativeUI C#(開発者向けの動...
更新日 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パターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む