ライブ環境でテストする
ウォーターマークなしで本番環境でテストしてください。
必要な場所でいつでも動作します。
オブジェクト指向プログラミング (オブジェクト指向プログラミング (OOP))は、プログラマーがモジュール化、再利用可能、そして適応性のあるコードを作成することを可能にする、ソフトウェア開発における基本的な概念です。 C#は、モダンなオブジェクト指向プログラミング言語であり、複雑なアプリケーションを構築するための強力なフレームワークを提供します。 このガイドは、C# を使用してオブジェクト指向プログラミング(OOP)の概念を紹介し、初心者がこれらの原則を効果的に理解し適用できるようになるための実践的な実装とコーディング例に焦点を当てています。 また、これらの原則をどのように適用するかについても説明します。C#用IronPDFライブラリ.
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 クラスには2つのデータメンバーがあります。(名前と色)および1つのメソッド(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クラスの外部からアクセスできません。 このフィールドへのアクセスは、get メソッドと set メソッドを含む公開 Name プロパティを通じて提供されます。
では、これらの原則を実際に行うために、複数のクラスを含む例を見ていきます。
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#アプリケーションにおいて抽象化、カプセル化、継承、そしてポリモーフィズムが連携して動作することを示しています。
について.NET 用 IronPDF ライブラリは、.NETアプリケーション内でPDF文書を作成、編集、抽出するプロセスを簡素化するように設計された、C#開発者向けの汎用ツールです。 IronPDFは簡単にHTML文字列からPDFを生成URLやASPXファイルをPDFに変換する機能を提供し、PDF作成および操作プロセスにおいて高いレベルの制御を実現します。 さらに、IronPDFはヘッダーとフッターの追加、透かしの挿入、および暗号化などの高度な機能をサポートしており、.NETアプリケーションでPDFを扱うための包括的なソリューションとなっています。
以下は、C#アプリケーション内でIronPDFを使用する簡単な例であり、virtualキーワードを組み込んで、OOPの基本概念である継承を通じてIronPDF機能を拡張する方法を説明しています。基本的な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には、HTMLコンテンツを取り込み、IronPDFを使用してPDFドキュメントを生成するメソッドGenerateReportがあります。 CustomReportGenerator クラスは BasicReportGenerator から継承し、GenerateReport メソッドをオーバーライドして、基本メソッドによって生成されたPDFにカスタムヘッダーを追加します。 以下はコードによって生成されたカスタムレポートです。
OOP(オブジェクト指向プログラミング)の基本原則を理解し、適用することによって、初心者はC#を習得し、堅牢なソフトウェアソリューションを開発するための大きな一歩を踏み出すことができます。 継承とポリモーフィズムは、コードの再利用と柔軟性を可能にし、新しいクラスが既存の構造と機能に基づいて構築できるようにします。 抽象化とカプセル化により、クラスは外部に対して必要なものだけを公開し、内部の動作はプライベートに保たれ、意図しない使用から守られます。 IronPDFをお試しくださいC#によるPDF生成の無料トライアルliteLicense`から利用可能です。
9つの .NET API製品 オフィス文書用