工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

C#における継承とは

継承はC#オブジェクト指向設計の基盤です。子クラスが親クラスのフィールドとメソッドを自動的に受け継ぎつつ、その振る舞いをオーバーライドまたは拡張することを可能にします。これによりコード再利用が促進され、保守性が簡素化され、明確な階層が確立されます。

C#継承の例

以下は継承の実装とprotectedメンバーの使用を示すステップバイステップデモンストレーションです。

ステップ1 - 基底クラスの修正

Tutorial.csを開き、Tutorialクラスの主要フィールドをprotectedに変更:

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

protectedを使用することで、派生クラスのみがこれらのフィールドに直接アクセス可能になります。

ステップ2 - 派生クラスの作成

基底クラス定義の後に、以下のコードをTutorial.csに追加:

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

解説:

  1. コロン(:)構文でGuru99TutorialをTutorialの子として宣言。
  2. RenameTutorialメソッドを追加し、TutorialNameに新しい値を割り当て。
  3. TutorialNameがprotectedのため、Guru99Tutorialは明示的に宣言しなくてもアクセス可能。

ステップ3 - Program.csで派生クラスを使用

Program.csの内容を以下に置き換え:

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

using System;
namespace DemoApplication {
    public class Tutorial {
        protected int TutorialID;
        protected string TutorialName;
        public void SetTutorial(int pID, string pName) {
            TutorialID = pID;
            TutorialName = pName;
        }
        public string GetTutorial() {
            return TutorialName;
        }
    }
    public class Guru99Tutorial : Tutorial {
        public void RenameTutorial(string pNewName) {
            TutorialName = pNewName;
        }
        static void Main(string[] args) {
            Guru99Tutorial pTutor = new Guru99Tutorial();
            pTutor.RenameTutorial(".Net by Guru99");
            Console.WriteLine(pTutor.GetTutorial());
            Console.ReadKey();
        }
    }
}

解説:

  1. プログラムは基底TutorialではなくGuru99Tutorialをインスタンス化。
  2. RenameTutorialを呼び出してタイトルを変更。
  3. GetTutorialは基底クラスで定義されているが、派生インスタンスから直接呼び出し可能。

このコードを実行すると:

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

C#における多態性とは

多態性は、単一のインターフェースで異なる内部形式を表現できるようにします。C#では、メソッドオーバーロードやオーバーライドとして現れ、同じメソッド名がパラメータやコンテキストに基づいて多様なタスクを実行できるようにします。

C#多態性の例

同一クラス内でのメソッドオーバーロードをデモンストレートします。

ステップ1 - 基底クラスの更新

Tutorial.csを以下のように修正:

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

主な変更点:

  1. SetTutorialメソッドが2つのオーバーロードを持つように - 1つはintとstringを受け取り、もう1つはstringのみ。
  2. 両オーバーロードが対応するフィールドに値を割り当て。

ステップ2 - Program.csでテスト

Program.csを以下のコードに置き換え:

using System;
namespace DemoApplication {
    class Tutorial {
        public int TutorialID;
        public string TutorialName;
        public void SetTutorial(int pID, string pName) {
            TutorialID = pID;
            TutorialName = pName;
        }
        public void SetTutorial(string pName) {
            TutorialName = pName;
        }
        public string GetTutorial() {
            return TutorialName;
        }
        static void Main(string[] args) {
            Tutorial pTutor = new Tutorial();
            pTutor.SetTutorial(1, "First Tutorial");
            Console.WriteLine(pTutor.GetTutorial());
            pTutor.SetTutorial("Second Tutorial");
            Console.WriteLine(pTutor.GetTutorial());
            Console.ReadKey();
        }
    }
}

解説:

  1. 最初の呼び出しでidとnameの両方を2パラメータオーバーロードに渡す。
  2. 2回目の呼び出しでnameのみを渡し、単一パラメータオーバーロードを呼び出し。

コンソール表示:

C#継承と多態性マスター:実践コード例で学ぶオブジェクト指向の核心

高度なシナリオでは、IDを個別に取得するGetTutorialIDメソッドを追加できます。

まとめ

C言語

  1. C# の式、文、ブロック:実践例で徹底理解
  2. C# クラスとオブジェクト:堅牢な OOP の基礎
  3. C# 抽象クラスと抽象メソッドをマスターする:実践ガイド
  4. C# 部分クラスと部分メソッドを理解する
  5. C# sealed クラスとメソッドをマスターする:使用判断、実例、コードの安全性とパフォーマンス向上
  6. C++関数を実例で徹底解説:基本から応用まで
  7. C++ structとclassの違い:構文、特徴、使い分けのベストプラクティス
  8. while文 vs do-while文:実践例で明確に比較
  9. C#プログラム構造の理解:コアコンポーネントと例
  10. C#の継承:再利用可能で保守しやすいコードを構築する
  11. Python type()とisinstance()の理解:実例付き解説