IRONSOFTWAREHOME
開発者向けアップデート

C# の virtual キーワード(開発者向けガイド)

Jacob Mellor, Chief Technology Officer @ Team Iron
Jacob Mellor
Updated: 2026年4月23日

C#では、仮想キーワードはオブジェクト指向プログラミングにおける重要な概念で、派生クラスでメソッドをオーバーライドできるようにすることで多態性を促進します。 このキーワードはクラスメソッド、プロパティ、またはイベントに適用されると、派生クラスによってオーバーライドキーワードを使用して動作を変更できることを示します。 このチュートリアルでは、C#の仮想キーワードについて学び、IronPDFライブラリを探ります。 さっそくその動作を実際の例で見ていきましょう。

仮想メソッドの実践

仮想キーワードの基本的な使い方

基本的には、仮想メソッドは基底クラスのメソッドで、派生クラスにおいて基底クラスで定義されたメソッドに特定の実装を提供することができます。

C#の仮想キーワードはメソッド、プロパティ、またはイベントを仮想としてマークし、派生クラスでオーバーライドできるようにします。 仮想メソッド Area を使用して基本クラスShape を定義する次の例を考えてみましょう**。**

public class Shape
{
    public virtual double Area()
    {
        return 0; // Default implementation, returns 0
    }
}

仮想メソッドのオーバーライド

派生クラスはこれらの仮想メソッドをオーバーライドして、派生クラスの特定の要件に合わせた自分の実装を提供することができます。 オーバーライドキーワードを使用して、基底クラス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; 
    }
}

上記のコードでは、Circleクラスが円の面積を計算するためにAreaメソッドの具体的な実装を提供しています。 これは多態性における仮想メソッドの力を示しています。

非仮想メソッド

すべてのメソッドが仮想である必要はないこと、または仮想であるべきではないことを覚えておくことが重要です。 非仮想メソッドは、派生クラスでオーバーライドできないように定義されており、最初の実装が変更されず、それを継承するすべてのクラスで利用されます。 これは、基底クラスが変更されるべきでない標準的な実装を提供するときに役立ちます。

実践的応用

これらの概念を実際のシナリオで活用してみましょう。 次のプログラムを考えてみてください。私たちのShapeCircleクラスを使用しています:

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()}");
    }
}

上記のサンプルプログラムは、実際の多態性と仮想関数の本質を示しています。 myCircleShapeとして宣言されているにもかかわらず、それは派生クラスであるCircleクラスからオーバーライドされたAreaメソッドを呼び出しています。これは、仮想キーワードとオーバーライドキーワードによって促進される動的ディスパッチメカニズムを示しています。

C# 仮想キーワード(開発者向けの動作方法):図 1 - 上記のコードからのコンソール出力で、myCircleがオーバーライドされた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}");
    }
}

BasicPdfRenderer クラス内でIronPDFを利用して、HTMLをPDFに変換し、そのRenderHtmlToPdfメソッドを仮想としてマークし、カスタマイズを許可します。 BasicPdfRendererから派生したCustomPdfRendererクラスは、このメソッドをオーバーライドして変換を行うだけでなく、生成されたPDF全体にわたる独自の大きな赤の透かしを挿入します。

出力PDFファイル

IronPDFによって生成されたPDFファイルです:

C# 仮想キーワード(開発者向けの動作方法):図 2 - バーチャルメソッドRenderHtmlToPDFをCustomPdfRenderedから利用して変換するサンプルコードの出力

結論

C# 仮想キーワード(開発者向けの動作方法):図 3 - IronPDFのライセンスプロセスについて学びましょう

C#の仮想キーワードは、多態性と動的ディスパッチを可能にするオブジェクト指向プログラミングの基礎石です。 基底クラスで定義されたメソッド、プロパティ、およびイベントの特定の実装を派生クラスが提供できるようにすることで、柔軟で再利用可能なコード構造を作成する力を開発者に与えます。 仮想メソッド、オーバーライドメカニズム、およびクラス階層の関係を理解し、実際の例を通じて、開発者はこれらの概念を効果的に活用して堅牢なアプリケーションを構築することができます。 さらに、これらの概念は開発者がアプリケーションでIronPDFをより効率的に使用できるようにもします。 IronPDFを無料で試すことができる無料のトライアルオプションを使用してみてください。

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor is Chief Technology Officer at Iron Software and a visionary engineer pioneering C# PDF technology. As the original developer behind Iron Software's core codebase, he has shaped the company's product architecture since its inception, transforming it alongside CEO Cameron Rimington into a 50+ person company serving NASA, Tesla, and global government agencies.

...
Read More

Related Articles

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

bullet_checkedクレジットカードやアカウントの作成は不要です。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge related to IronPDF Product Demo

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。