IRONSOFTWAREHOME
开发者更新

C# 虚拟关键字(开发人员如何使用)

Jacob Mellor,Team Iron 的首席技术官
Jacob Mellor
Updated: 2026年4月23日

在 C# 中,virtual 关键字 是面向对象编程中一个关键概念,它促进了多态性,允许开发人员在派生类中重写方法。 当此关键字应用于类的方法、属性或事件时,表示该实体可以通过派生类使用 override 关键字修改其行为。 在本教程中,我们将学习 C# 的 Virtual 关键字,并探索 IronPDF 库。 让我们直接深入了解其工作原理,并通过实际示例来看看它的实际应用。

虚方法的实际运用

Virtual 关键字的基本用法

从本质上说,虚方法是一个基类的方法,允许派生类为基类中已定义的方法提供特定的实现。

C# 中的 virtual 关键字标记方法、属性或事件为虚,表明它可以在任何继承自它的类中被重写。 考虑以下示例,其中我们定义了一个基类Shape和一个虚方法Area:

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

重写虚方法

派生类可以重写这些虚方法,以提供自己实现,适应派生类的具体要求。 使用 override 关键字,我们创建一个从 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 方法的特定实现,该实现用于计算圆的面积。 这展示了虚函数在多态性中的力量。

非虚方法

值得注意的是,并不是所有的方法都需要或应该是虚的。 非虚方法的定义方式是,在派生类中不能重写,也就是说,初始实现保持不变,并由所有继承自它的类使用。 当基类提供一个不应更改的标准实现时,这会很有用。

实际应用

让我们在实际场景中应用这些概念。 考虑以下程序,它使用了我们的 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()}");
    }
}

上述示例程序展示了多态性的实际应用和虚函数的本质。 尽管 myCircle 被声明为 Shape,它调用了来自 Circle 类的重写 Area 方法,展示了由 virtual 和 override 关键字促成的动态调度机制。

C# 虚拟关键字(开发人员如何使用):图1 - 上面代码的控制台输出展示了如何通过myCircle调用重写的Area方法

Virtual 和 Override 关键字的高级用法

抽象方法和类

抽象方法是在抽象类中的进一步步骤。 抽象方法是在基类中声明但无实现的方法,必须在派生类中被重写。 它迫使派生类为抽象方法提供实现,确保一致的接口,同时允许每个派生类的定制行为。

方法重载与重写

理解方法重载和重写之间的区别也很重要。 方法重载在同一个类中发生,允许多个方法具有相同的名称但不同的参数。 由 virtual 和 override 关键字促成的方法重写允许派生类为基类中定义的方法提供不同的实现。

虚属性和事件

除了方法,属性和事件也可以是虚的。 这使派生类能够提供自定义的获取器、设置器和事件处理程序,进一步增强类层次的灵活性。

IronPDF:.NET PDF 库

IronPDF 是一个为 C# 开发人员设计的全面库,用于在 .NET 应用程序中生成、操纵和渲染 PDF 文档。 它提供了一个直观的 API,简化了 处理 PDF 文件,例如使用 HTML 创建 PDF,帮助开发人员创建、编辑和转换 PDF,而无需理解复杂的底层 PDF 文档结构或诉诸外部软件。 IronPDF 无缝集成了语言的面向对象特性,包括使用 virtual 关键字,提供可定制的 PDF 处理能力。

在 IronPDF 中使用 virtual 关键字允许开发人员在应用程序中扩展 IronPDF 类的功能。 通过定义与 PDF 生成或操纵相关的虚方法的基类,开发人员可以创建派生类重写这些方法,以根据特定需求调整 PDF 处理行为。

示例:使用虚方法自定义 PDF 渲染

假设你有一个基类使用 IronPDF 从 HTML 字符串渲染 PDF。 通过将渲染方法标记为虚,你允许派生类修改或增强渲染过程。 这是一个简单的例子:

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 - 示例代码输出利用CustomPdfRendered中的虚拟方法RenderHtmlToPDF进行转换

结论

C# 中的 virtual 关键字是面向对象编程的基础,启用多态性和动态调度。 通过允许派生类为在基类中定义的方法、属性和事件提供特定实现,它使开发人员能够创建灵活且可重用的代码结构。 通过实际示例和理解虚方法、重写机制与类层次之间的关系,开发人员可以有效地利用这些概念来构建强大的应用程序。 此外,这些概念还将帮助开发人员更高效地在应用程序中使用 IronPDF。 你可以通过其免费试用选项测试 IronPDF,而无需支付任何费用。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥。

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999 起