IRONSOFTWAREHOME
开发者更新

C# 虚拟与抽象(开发人员如何使用)

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

在 C# 中, 虚方法 可以在派生类中被重写,而抽象方法必须在派生类中重写。 这允许灵活的行为并在面向对象编程中启用多态性。 这两个概念在面向对象编程中允许灵活性和可重用性。 本文解释了抽象方法和虚方法的具体细节,提供了清晰的示例,并专注于它们在编码中的实际用途。 我们还将探讨文章后面的IronPDF 功能和用例。

抽象类和方法

抽象类是一种特殊类型的类,不能直接实例化。 相反,它作为其他类的蓝图。 抽象类可以包含抽象方法,这些方法在抽象类中声明,但必须在具体派生类中实现。

public abstract class Vehicle
{
    // Abstract method to be implemented in non-abstract child class
    public abstract void DisplayInfo();
}

在这个例子中,Vehicle 类是抽象的,DisplayInfo 是一个抽象方法。 DisplayInfo 方法在 Vehicle 类中没有任何实现。 它迫使派生类提供其自己的方法定义。

虚方法

虚方法是基类中的方法,它有一个默认实现,但可以在派生类中重写。 虚 关键字用于声明一个方法为虚方法。 派生类使用 override 关键字为方法提供特定实现,这有助于理解子类如何重写其父类的虚方法。

// Non-abstract class
public class Animal
{
    // Virtual method with a default implementation
    public virtual void Speak()
    {
        Console.WriteLine("Some generic animal sound");
    }
}

这里,Animal 类有一个名为 Speak 的虚方法,带有默认实现。 派生类可以重写这个方法,以使用 override 关键字提供特定的动物声音。

结合虚方法和抽象方法

一个类可以同时拥有抽象方法和虚方法。 抽象方法没有实现,必须在派生类中重写,而虚方法有一个默认实现,派生类可以选择重写。

考虑一个场景,您正在构建一个系统,该系统模拟不同类型的车辆,每种车辆都有其显示信息的方法。 以下是您如何使用抽象和虚方法:

public abstract class Vehicle
{
    // Abstract method
    public abstract void DisplayInfo();

    // Virtual method
    public virtual void StartEngine()
    {
        Console.WriteLine("Engine started with default configuration.");
    }
}

在这个 Vehicle 类中,DisplayInfo 是一个抽象方法,迫使所有派生类实现其显示信息的方式。 但是,StartEngine 提供了一个默认的启动引擎方法,如果需要,子类可以重写它。

派生类的例子

现在,我们定义一个Vehicle继承的非抽象子类,实现抽象方法,同时可以选择重写虚方法:

public class Car : Vehicle
{
    // Override the abstract method
    public override void DisplayInfo()
    {
        Console.WriteLine("This is a car.");
    }

    // Override the virtual method
    public override void StartEngine()
    {
        Console.WriteLine("Car engine started with custom settings.");
    }
}

这里,Car 类为抽象方法 DisplayInfo 和虚方法 StartEngine 提供了具体实现。

区别以及何时使用

  • 当所有派生类都必须提供其方法的实现时,使用抽象方法。
  • 当派生类应该有选择权以重写默认或提供额外行为时,使用虚方法。

抽象方法和虚方法是 C# 中强大的特性,使您能够编写更可维护和可重用的代码。 通过在基类中将方法定义为抽象或虚方法,您可以指示哪些方法必须在派生类中重写,哪些方法可以选择性地重写以修改或扩展默认行为。

重写虚方法

在派生类中重写虚拟方法允许自定义行为,同时保留调用基类实现的选项。 这是通过使用 base 关键字实现的。

重写和调用基类实现的例子

public class ElectricCar : Car
{
    // Override the StartEngine method
    public override void StartEngine()
    {
        base.StartEngine(); // Call the base class implementation
        Console.WriteLine("Electric car engine started with energy-saving mode.");
    }
}

在这个示例中,StartEngine方法。 它调用基类实现并添加特定于电动汽车的其他行为。

实现抽象类和非抽象类

了解抽象类和非抽象类在软件开发中的实用差异和应用至关重要。 抽象类作为其他类的模板,而非抽象类用于实例化对象。 选择使用抽象类还是非抽象类取决于您是否需要创建一个不应该自行实例化的基类。

IronPDF:C# PDF库

C# 虚拟 VS 抽象(开发者如何使用):图1 - IronPDF

IronPDF 是一个全面的 PDF 库,专为在 .NET 应用程序中直接生成、编辑和读取 PDF 文档而设计。 这个工具因能够从HTML 字符串、文件和 URL 直接创建 PDF 而脱颖而出。 开发者可以在 C# 项目中程序化地创建、修改和提取 PDF 内容。 让我们在本文中探讨 IronPDF 的一个例子。

IronPDF 的主要功能是将HTML 转换为 PDF,确保布局和样式得以保留。 这个工具非常适合从网页内容创建报告、发票和文档的 PDF。 它支持将 HTML 文件、URL 和 HTML 字符串转换为 PDF 文件。

using IronPdf;

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

        // Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
        
        // Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
        
        // Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

代码示例

这是一个简单的实际代码示例,以说明在扩展 IronPDF 功能时使用 虚 和 抽象 关键字的用法:

public abstract class PdfReportGenerator
{
    // Use abstract method to force derived classes to implement their custom PDF generation logic
    public abstract void GenerateReport(string filePath);

    // A virtual function allows derived classes to override the default implementation of PDF setup
    public virtual void SetupPdfGenerator()
    {
        // Default PDF setup logic that can be overridden by derived classes
        IronPdf.Installation.TempFolderPath = @"F:\TempPdfFiles";
    }
}

public class MonthlyReportGenerator : PdfReportGenerator
{
    // Override abstract method to provide specific implementation
    public override void GenerateReport(string filePath)
    {
        var pdf = new ChromePdfRenderer();
        pdf.RenderHtmlAsPdf("<h1>Monthly Report</h1> <p>Add Your report content here....</p>").SaveAs(filePath);
    }

    // Optionally override the virtual method to customize the setup
    public override void SetupPdfGenerator()
    {
        base.SetupPdfGenerator();
        // Additional setup logic specific to monthly reports
        IronPdf.Installation.TempFolderPath = @"F:\MonthlyReports";
    }
}

class Program
{
    static void Main(string[] args)
    {
        License.LicenseKey = "License-Key";
        PdfReportGenerator reportGenerator = new MonthlyReportGenerator();
        reportGenerator.SetupPdfGenerator();
        reportGenerator.GenerateReport(@"F:\MonthlyReports\MonthlyReport.pdf");
        Console.WriteLine("Report generated successfully.");
    }
}

在这个自定义实现示例中,PdfReportGenerator 是一个抽象类,它定义了生成 PDF 报告的契约,具有一个用于生成报告的方法和一个可以选择性地被重写的虚方法。 MonthlyReportGenerator 是一个具体实现,它提供了生成月度报告的详细信息,并通过重写虚方法来定制设置。

C# 虚拟 VS 抽象(开发者如何使用):图2 - 报告输出

结论

有效地理解和使用虚方法和抽象方法可以显著增强您的 C# 编程。 记住,抽象方法要求派生类提供实现,而虚方法允许选择性地覆盖默认实现。 IronPDF库提供免费试用和许可选项,许可证起价为$999,为您的PDF需求提供全面的解决方案。

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 起