在生产环境中测试,无水印。
随时随地满足您的需求。
获得30天的全功能产品。
几分钟内就能启动并运行。
在您的产品试用期间,全面访问我们的支持工程团队。
面向对象编程 (OOP) 是软件开发中的一个基本概念,使程序员能够创建模块化、可重用和可适应的代码。 C# 是一种面向对象的现代编程语言,为构建复杂的应用程序提供了一个强大的框架。 本指南介绍了使用 C# 的 OOP 概念,侧重于实际实现和编码示例,以帮助初学者理解并有效应用这些原则。 我们还将讨论如何将这些原则应用于IronPDF 库 for C#。
OOP 的核心是几个关键概念:类、对象、继承、多态性、抽象和封装。 这些概念允许开发人员对现实世界的实体建模、管理复杂性并提高代码的可维护性。
类创建单个对象。 类是一个蓝图,定义了类中所有对象共享的数据和行为。 对象是类的一种表现形式。 它体现的是真实的价值,而不是类蓝图中定义的抽象占位符。
public class Car // A class declared as 'Car' defines its structure and behavior.
{
public string Name;
public string Color;
public void DisplayInfo()
{
Console.WriteLine($"Name: {Name}, Color: {Color}");
}
}
class Program // This is the program class, serving as the entry point of a C# program.
{
static void Main(string [] args)
{
Car myCar = new Car();
myCar.Name = "Toyota";
myCar.Color = "Red";
myCar.DisplayInfo();
}
}
public class Car // A class declared as 'Car' defines its structure and behavior.
{
public string Name;
public string Color;
public void DisplayInfo()
{
Console.WriteLine($"Name: {Name}, Color: {Color}");
}
}
class Program // This is the program class, serving as the entry point of a C# program.
{
static void Main(string [] args)
{
Car myCar = new Car();
myCar.Name = "Toyota";
myCar.Color = "Red";
myCar.DisplayInfo();
}
}
Public Class Car ' A class declared as 'Car' defines its structure and behavior.
Public Name As String
Public Color As String
Public Sub DisplayInfo()
Console.WriteLine($"Name: {Name}, Color: {Color}")
End Sub
End Class
Friend Class Program ' This is the program class, serving as the entry point of a C# program.
Shared Sub Main(ByVal args() As String)
Dim myCar As New Car()
myCar.Name = "Toyota"
myCar.Color = "Red"
myCar.DisplayInfo()
End Sub
End Class
在这个例子中,Car 类有两个数据成员(Name 和 Color)和一个方法(DisplayInfo)。 Main 方法作为应用程序的入口,创建了一个 Car 类的实例,并在调用其方法显示这些值之前为其字段赋值。
继承允许类继承现有类的属性和方法。 属性被继承的类称为基类,继承这些属性的类称为派生类。
public class Vehicle
{
public string LicensePlate;
public void Honk()
{
Console.WriteLine("Honking");
}
}
public class Truck : Vehicle // Truck is a child class derived from the Vehicle base class.
{
public int CargoCapacity;
}
class Program
{
static void Main(string [] args)
{
Truck myTruck = new Truck();
myTruck.LicensePlate = "ABC123";
myTruck.CargoCapacity = 5000;
myTruck.Honk();
}
}
public class Vehicle
{
public string LicensePlate;
public void Honk()
{
Console.WriteLine("Honking");
}
}
public class Truck : Vehicle // Truck is a child class derived from the Vehicle base class.
{
public int CargoCapacity;
}
class Program
{
static void Main(string [] args)
{
Truck myTruck = new Truck();
myTruck.LicensePlate = "ABC123";
myTruck.CargoCapacity = 5000;
myTruck.Honk();
}
}
Public Class Vehicle
Public LicensePlate As String
Public Sub Honk()
Console.WriteLine("Honking")
End Sub
End Class
Public Class Truck ' Truck is a child class derived from the Vehicle base class.
Inherits Vehicle
Public CargoCapacity As Integer
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim myTruck As New Truck()
myTruck.LicensePlate = "ABC123"
myTruck.CargoCapacity = 5000
myTruck.Honk()
End Sub
End Class
在此示例中,Truck 是一个派生类,扩展自 Vehicle 基类,继承其 LicensePlate 字段和 Honk 方法,同时添加了一个新字段 CargoCapacity。
多态性使对象可以作为其基类而非特定类的实例来处理。 抽象允许您定义抽象类和接口,这些类和接口不能实例化,但可以用作基类。
抽象类不能实例化,通常用于提供基类的通用定义,供多个派生类共享。
public abstract class Shape
{
public abstract void Draw();
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
public abstract class Shape
{
public abstract void Draw();
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle");
}
}
Public MustInherit Class Shape
Public MustOverride Sub Draw()
End Class
Public Class Circle
Inherits Shape
Public Overrides Sub Draw()
Console.WriteLine("Drawing a circle")
End Sub
End Class
接口建立了一种协议或契约,类可以通过实现其定义的方法来履行这种协议或契约。 类可以实现多个接口,从而实现一种多态性。
public interface IDrawable
{
void Draw();
}
public interface IColorable
{
void Color();
}
public class CustomShape : IDrawable, IColorable // Defining a new class CustomShape that implements IDrawable and IColorable.
{
public void Draw()
{
Console.WriteLine("Custom shape drawn");
}
public void Color()
{
Console.WriteLine("Custom shape colored");
}
}
public interface IDrawable
{
void Draw();
}
public interface IColorable
{
void Color();
}
public class CustomShape : IDrawable, IColorable // Defining a new class CustomShape that implements IDrawable and IColorable.
{
public void Draw()
{
Console.WriteLine("Custom shape drawn");
}
public void Color()
{
Console.WriteLine("Custom shape colored");
}
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
封装是一种限制访问对象的某些组件并防止外部人员看到内部表示的机制。 这可以通过使用访问修饰符来实现。
public class Person
{
private string name; // Private variable, inaccessible outside the class
public string Name // Public property to access the private variable
{
get { return name; }
set { name = value; }
}
}
// Example showing a simple customer class with encapsulated data
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
}
public class Person
{
private string name; // Private variable, inaccessible outside the class
public string Name // Public property to access the private variable
{
get { return name; }
set { name = value; }
}
}
// Example showing a simple customer class with encapsulated data
public class Customer
{
public string Name { get; set; }
public string Address { get; set; }
}
Public Class Person
'INSTANT VB NOTE: The field name was renamed since Visual Basic does not allow fields to have the same name as other class members:
Private name_Conflict As String ' Private variable, inaccessible outside the class
Public Property Name() As String ' Public property to access the private variable
Get
Return name_Conflict
End Get
Set(ByVal value As String)
name_Conflict = value
End Set
End Property
End Class
' Example showing a simple customer class with encapsulated data
Public Class Customer
Public Property Name() As String
Public Property Address() As String
End Class
在这个例子中,name字段是私有的,使其在Person类之外无法访问。 此字段的访问由公共名称属性提供,该属性包括获取和设置方法。
现在,我们将探讨一个涉及多个类的示例,以实际演示这些原则。
using System;
namespace OOPExample
{
public class Program
{
static void Main(string [] args)
{
ElectricCar myElectricCar = new ElectricCar();
myElectricCar.Make = "Tesla";
myElectricCar.Model = "Model 3";
myElectricCar.BatteryLevel = 100;
myElectricCar.Drive();
myElectricCar.Charge();
}
}
public abstract class Vehicle
{
public string Make { get; set; }
public string Model { get; set; }
public abstract void Drive();
}
public class Car : Vehicle
{
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving.");
}
}
public class ElectricCar : Car
{
public int BatteryLevel { get; set; }
public void Charge()
{
Console.WriteLine("Charging the car.");
}
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving silently.");
}
}
}
using System;
namespace OOPExample
{
public class Program
{
static void Main(string [] args)
{
ElectricCar myElectricCar = new ElectricCar();
myElectricCar.Make = "Tesla";
myElectricCar.Model = "Model 3";
myElectricCar.BatteryLevel = 100;
myElectricCar.Drive();
myElectricCar.Charge();
}
}
public abstract class Vehicle
{
public string Make { get; set; }
public string Model { get; set; }
public abstract void Drive();
}
public class Car : Vehicle
{
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving.");
}
}
public class ElectricCar : Car
{
public int BatteryLevel { get; set; }
public void Charge()
{
Console.WriteLine("Charging the car.");
}
public override void Drive()
{
Console.WriteLine($"The {Make} {Model} is driving silently.");
}
}
}
Imports System
Namespace OOPExample
Public Class Program
Shared Sub Main(ByVal args() As String)
Dim myElectricCar As New ElectricCar()
myElectricCar.Make = "Tesla"
myElectricCar.Model = "Model 3"
myElectricCar.BatteryLevel = 100
myElectricCar.Drive()
myElectricCar.Charge()
End Sub
End Class
Public MustInherit Class Vehicle
Public Property Make() As String
Public Property Model() As String
Public MustOverride Sub Drive()
End Class
Public Class Car
Inherits Vehicle
Public Overrides Sub Drive()
Console.WriteLine($"The {Make} {Model} is driving.")
End Sub
End Class
Public Class ElectricCar
Inherits Car
Public Property BatteryLevel() As Integer
Public Sub Charge()
Console.WriteLine("Charging the car.")
End Sub
Public Overrides Sub Drive()
Console.WriteLine($"The {Make} {Model} is driving silently.")
End Sub
End Class
End Namespace
在此示例中,Drive() 是来自 Vehicle 抽象类的抽象方法。 Car 是一个派生类,实现了 Drive(),而 ElectricCar 是层次结构中更低一级的类,添加了类似 BatteryLevel 的新特性和它自己的 Drive() 实现。 该结构演示了抽象、封装、继承和多态性在 C# 应用程序中的协同工作。
IronPDF library for .NET 是一个多功能工具,专为 C# 开发者设计,旨在简化在 .NET 应用程序中创建、编辑和提取 PDF 文档的过程。 IronPDF 能够轻松从 HTML 字符串、URL 或 ASPX 文件生成 PDF,提供对 PDF 创建和操作过程的高度控制。 此外,IronPDF 还支持添加页眉和页脚、水印和加密等高级功能,是在 .NET 应用程序中处理 PDF 的全面解决方案。
以下是一个简单的示例,演示了如何在 C# 应用程序中使用 IronPDF,其中包含 virtual 关键字,以说明如何通过继承扩展 IronPDF 功能,这是面向对象编程(OOP)的核心概念。假设我们有一个基本类生成一个基本的 PDF 报告,还有一个派生类扩展了此功能以包括自定义页眉:
using IronPdf;
public class BasicReportGenerator
{
public virtual PdfDocument GenerateReport(string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
return pdf;
}
}
public class CustomReportGenerator : BasicReportGenerator
{
public override PdfDocument GenerateReport(string htmlContent)
{
var pdf = base.GenerateReport(htmlContent);
AddCustomHeader(pdf, "Custom Report Header");
return pdf;
}
private void AddCustomHeader(PdfDocument document, string headerContent)
{
// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
CenterText = headerContent,
};
document.AddTextHeaders(textHeader);
}
}
class Program
{
static void Main(string [] args)
{
License.LicenseKey = "License-Key";
// HTML content for the report
string htmlContent = "<html><body><h1>Sample Report</h1><p>This is a sample report content.</p></body></html>";
// Using BasicReportGenerator
BasicReportGenerator basicReportGenerator = new BasicReportGenerator();
var basicPdf = basicReportGenerator.GenerateReport(htmlContent);
basicPdf.SaveAs("basic_report.pdf");
// Using CustomReportGenerator
CustomReportGenerator customReportGenerator = new CustomReportGenerator();
var customPdf = customReportGenerator.GenerateReport(htmlContent);
customPdf.SaveAs("custom_report.pdf");
Console.WriteLine("PDF reports generated successfully.");
}
}
using IronPdf;
public class BasicReportGenerator
{
public virtual PdfDocument GenerateReport(string htmlContent)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
return pdf;
}
}
public class CustomReportGenerator : BasicReportGenerator
{
public override PdfDocument GenerateReport(string htmlContent)
{
var pdf = base.GenerateReport(htmlContent);
AddCustomHeader(pdf, "Custom Report Header");
return pdf;
}
private void AddCustomHeader(PdfDocument document, string headerContent)
{
// Create text header
TextHeaderFooter textHeader = new TextHeaderFooter
{
CenterText = headerContent,
};
document.AddTextHeaders(textHeader);
}
}
class Program
{
static void Main(string [] args)
{
License.LicenseKey = "License-Key";
// HTML content for the report
string htmlContent = "<html><body><h1>Sample Report</h1><p>This is a sample report content.</p></body></html>";
// Using BasicReportGenerator
BasicReportGenerator basicReportGenerator = new BasicReportGenerator();
var basicPdf = basicReportGenerator.GenerateReport(htmlContent);
basicPdf.SaveAs("basic_report.pdf");
// Using CustomReportGenerator
CustomReportGenerator customReportGenerator = new CustomReportGenerator();
var customPdf = customReportGenerator.GenerateReport(htmlContent);
customPdf.SaveAs("custom_report.pdf");
Console.WriteLine("PDF reports generated successfully.");
}
}
Imports IronPdf
Public Class BasicReportGenerator
Public Overridable Function GenerateReport(ByVal htmlContent As String) As PdfDocument
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
Return pdf
End Function
End Class
Public Class CustomReportGenerator
Inherits BasicReportGenerator
Public Overrides Function GenerateReport(ByVal htmlContent As String) As PdfDocument
Dim pdf = MyBase.GenerateReport(htmlContent)
AddCustomHeader(pdf, "Custom Report Header")
Return pdf
End Function
Private Sub AddCustomHeader(ByVal document As PdfDocument, ByVal headerContent As String)
' Create text header
Dim textHeader As New TextHeaderFooter With {.CenterText = headerContent}
document.AddTextHeaders(textHeader)
End Sub
End Class
Friend Class Program
Shared Sub Main(ByVal args() As String)
License.LicenseKey = "License-Key"
' HTML content for the report
Dim htmlContent As String = "<html><body><h1>Sample Report</h1><p>This is a sample report content.</p></body></html>"
' Using BasicReportGenerator
Dim basicReportGenerator As New BasicReportGenerator()
Dim basicPdf = basicReportGenerator.GenerateReport(htmlContent)
basicPdf.SaveAs("basic_report.pdf")
' Using CustomReportGenerator
Dim customReportGenerator As New CustomReportGenerator()
Dim customPdf = customReportGenerator.GenerateReport(htmlContent)
customPdf.SaveAs("custom_report.pdf")
Console.WriteLine("PDF reports generated successfully.")
End Sub
End Class
在此示例中,BasicReportGenerator 具有一个方法 GenerateReport,该方法获取 HTML 内容并使用 IronPDF 生成 PDF 文档。 CustomReportGenerator 类继承自 BasicReportGenerator,重写了 GenerateReport 方法,以在基础方法生成 PDF 后添加自定义页眉。 以下是代码生成的自定义报告:
通过理解和应用 OOP 的基本原则,初学者可以在掌握 C# 和开发强大的软件解决方案方面迈出重要的一步。 继承和多态可以实现代码的重用和灵活性,让新的类建立在现有结构和功能的基础上。 抽象和封装确保类只向外界暴露必要的内容,保持内部工作的私密性和安全性,避免意外使用。 您可以试用 IronPDF 用于 C# 生成 PDF 的免费试用版,起始版本为 liteLicense
。