.NET ヘルプ

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

ジョルディ・バルディア
ジョルディ・バルディア
2024年4月3日
共有:

オブジェクト指向プログラミング (オブジェクト指向プログラミング (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();
    }
}

この例では、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();
    }
}

この例では、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 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 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; } 
}

この例では、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.");
        }
    }
}

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

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

IronPDF: C# PDFライブラリ

について.NET 用 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.");
    }
}

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

C#オブジェクト指向(開発者のための仕組み):図3 - コード例から生成されたカスタムPDFで、記事で取り上げたOOPメソッドを紹介しています。

結論

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

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

ジョルディ・バルディア
ソフトウェアエンジニア
ジョルディは、Iron Softwareでのスキルを活かしていないときには、ゲームプログラミングをしており、Python、C#、C++に最も堪能です。彼は製品テスト、製品開発、研究の責任を共有しており、継続的な製品改善に大きな価値をもたらしています。この多様な経験は彼を常に挑戦的で魅力的に保ち、彼はIron Softwareで働く一番好きな側面の一つだと言っています。ジョルディはフロリダ州マイアミで育ち、フロリダ大学でコンピューターサイエンスと統計学を学びました。
< 以前
C# Action (開発者向けの動作方法)
次へ >
C# String.Join(開発者向けの使い方)