.NET ヘルプ

C# オブジェクト指向 (開発者向けの仕組み)

更新済み 4月 3, 2024
共有:

オブジェクト指向プログラミング (オブジェクト指向プログラミング (OOP)) は、プログラマーがモジュール化、再利用可能、そして適応性のあるコードを作成することを可能にする、ソフトウェア開発における基本的な概念です。 C#は、モダンなオブジェクト指向プログラミング言語であり、複雑なアプリケーションを構築するための強力なフレームワークを提供します。 このガイドは、C# を使用してオブジェクト指向プログラミング(OOP)の概念を紹介し、初心者がこれらの原則を効果的に理解し適用できるようになるための実践的な実装とコーディング例に焦点を当てています。 この原則をどのように適用できるかについても議論します。 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 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 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 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
VB   C#

この例では、Car クラスには2つのデータメンバーがあります。 (名前と色) および1つのメソッド (DisplayInfo (ディスプレイ・インフォ)). Mainメソッドはアプリケーションのエントリーポイントとして機能し、Carクラスのインスタンスを作成し、そのフィールドに値を割り当てた後、これらの値を表示するためにメソッドを呼び出します。

C#オブジェクト指向(開発者にとっての動作について):図1 - コンソールはDisplayInfoメソッドを通じてCarオブジェクトのメンバー値(name、color)を表示します。

継承:既存のクラスを拡張する

継承は、クラスが既存のクラスのプロパティとメソッドを継承することを可能にします。 そのプロパティを継承するクラスは基底クラスと呼ばれ、そのプロパティを継承するクラスは派生クラスと呼ばれます。

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
VB   C#

この例では、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
VB   C#

複数インターフェイスの実装

インターフェースは、クラスがその定義されたメソッドを実装することによって実現できる合意、または契約を確立します。 クラスは複数のインターフェースを実装することができ、ポリモーフィズムの一形態を実現します。

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");
    }
}
Public Interface IDrawable
	Sub Draw()
End Interface
Public Interface IColorable
	Sub Color()
End Interface
Public Class CustomShape ' Defining a new class CustomShape that implements IDrawable and IColorable
	Implements IDrawable, IColorable

	Public Sub Draw() Implements IDrawable.Draw
		Console.WriteLine("Custom shape drawn")
	End Sub
	Public Sub Color() Implements IColorable.Color
		Console.WriteLine("Custom shape colored")
	End Sub
End Class
VB   C#

カプセル化: データを保護する

カプセル化とは、オブジェクトの特定のコンポーネントへのアクセスを制限し、外部の関係者が内部の表現を見ることを防ぐメカニズムです。 これはアクセス修飾子の使用によって達成されます。

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
VB   C#

この例では、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
VB   C#

この例では、Drive() は、Vehicle 抽象クラスからの抽象メソッドです。 CarDrive を実装する派生クラスです()、およびElectricCarは階層のさらに下のレベルで、新しい機能としてBatteryLevelおよび独自のDriveを追加します。() 実装。 この構造は、C#アプリケーションにおいて抽象化、カプセル化、継承、そしてポリモーフィズムが連携して動作することを示しています。

C# オブジェクト指向 (開発者向けの動作方式): 図2 - ドライブの抽象メソッドおよびチャージメソッドの出力をコンソールに出力するコード

IronPDF: C# PDFライブラリ

IronPDF は、.NETアプリケーション内でPDFドキュメントの作成、編集、および抽出プロセスを簡素化するために設計された、C#開発者向けの多用途なライブラリです。 IronPDFは簡単に HTML文字列からPDFを生成URLやASPXファイルをPDFに変換する機能を提供し、PDF作成および操作プロセスにおいて高いレベルの制御を実現します。 さらに、IronPDFはヘッダーとフッターの追加、透かしの挿入、および暗号化などの高度な機能をサポートしており、.NETアプリケーションでPDFを扱うための包括的なソリューションとなっています。

OOPを使用したIronPDFの例

以下は、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
VB   C#

この例では、BasicReportGeneratorには、HTMLコンテンツを取り込み、IronPDFを使用してPDFドキュメントを生成するメソッドGenerateReportがあります。 CustomReportGenerator クラスは BasicReportGenerator から継承し、GenerateReport メソッドをオーバーライドして、基本メソッドによって生成されたPDFにカスタムヘッダーを追加します。 以下はコードによって生成されたカスタムレポートです。

C# オブジェクト指向プログラミング(開発者向けの仕組み): 図3 - コード例から生成されたカスタムPDF、記事で説明されたOOPメソッドを示している

結論

C# オブジェクト指向 (開発者向けの動作方法): 図 4 - IronPDF ライセンスページ

OOP(オブジェクト指向プログラミング)の基本原則を理解し、適用することによって、初心者はC#を習得し、堅牢なソフトウェアソリューションを開発するための大きな一歩を踏み出すことができます。 継承とポリモーフィズムは、コードの再利用と柔軟性を可能にし、新しいクラスが既存の構造と機能に基づいて構築できるようにします。 抽象化とカプセル化により、クラスは外部に対して必要なものだけを公開し、内部の動作はプライベートに保たれ、意図しない使用から守られます。 IronPDFをお試しください 無料試用$749から利用可能です。

< 以前
C# Action (開発者向けの動作方法)
次へ >
C# String.Join(開発者向けの使い方)

準備はできましたか? バージョン: 2024.9 新発売

無料のNuGetダウンロード 総ダウンロード数: 10,659,073 View Licenses >