●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

同じ命令で異なる動きができる「多態性(Polymorphism)」とは?

C#をはじめとしたオブジェクト指向言語では、多態性(Polymorphism) という概念が重要です。
多態性とは、同じ名前のメソッドを使っても、呼び出す対象に応じて異なる振る舞いをすることを意味します。

多態性の種類

  • メソッドのオーバーロード: 引数の違いで複数定義
  • メソッドのオーバーライド: 継承クラスで処理を上書き
  • インターフェースや基底クラスを使った共通操作

例:親クラスと子クラスで同じメソッド名でも動作が違う

public class Animal {
    public virtual void Speak() {
        Console.WriteLine("何かの動物が鳴く");
    }
}

public class Dog : Animal {
    public override void Speak() {
        Console.WriteLine("ワンワン!");
    }
}

public class Cat : Animal {
    public override void Speak() {
        Console.WriteLine("ニャー!");
    }
}
    

多態性を活かした使い方

Animal型の変数に、DogやCatなどのインスタンスを代入しても、それぞれのクラスに応じた動きになります。

Animal a1 = new Dog();
Animal a2 = new Cat();

a1.Speak();  // → ワンワン!
a2.Speak();  // → ニャー!
    

なぜ多態性が便利なのか?

  • 親クラス(またはインターフェース)でコードを共通化できる
  • 実際の動作は子クラスに任せられる
  • 処理を柔軟に拡張・変更しやすい

例:配列でまとめて処理

Animal[] animals = { new Dog(), new Cat(), new Dog() };

foreach (Animal a in animals) {
    a.Speak();  // 実行時にそれぞれのSpeak()が呼ばれる
}
    

interfaceを使った多態性

public interface IShape {
    void Draw();
}

public class Circle : IShape {
    public void Draw() {
        Console.WriteLine("○ を描く");
    }
}

public class Square : IShape {
    public void Draw() {
        Console.WriteLine("□ を描く");
    }
}

IShape shape = new Circle();
shape.Draw();  // → ○ を描く
    

まとめ

多態性(Polymorphism)とは、「同じ名前のメソッドでも、実行するオブジェクトによって処理が変わる」という性質です。
この仕組みにより、コードの共通化・拡張性・保守性が向上します。
C#での多態性は、virtual / overrideinterfaceを通じて実現されます!

 

C#関連用語集

−−−−−  C#  −−−−−

C#の基本単位「クラス(Class)」とは?

クラスから生まれる実体「オブジェクト(Object)」とは?

クラスの実体「インスタンス(Instance)」とは?

オブジェクトの初期化に使う「コンストラクタ(Constructor)」とは?

フィールドへのアクセスを制御!「プロパティ(Property)」とは?

クラスが持つデータ「フィールド(Field)」とは?

クラスの動作を定義する「メソッド(Method)」とは?

既存のクラスを引き継ぐ「継承(Inheritance)」とは?

同じ命令で異なる動きができる「多態性(Polymorphism)」とは?

データを守る「カプセル化(Encapsulation)」とは?

土台だけを用意する「抽象クラス(Abstract Class)」とは?

ルールを定める仕組み「インターフェース(Interface)」とは?

親クラスのメソッドを上書きする「オーバーライド(Override)」とは?

引数の違いで同じ名前が使える「オーバーロード(Overload)」とは?

C#で自分自身を指す「thisキーワード」とは?

親クラスの機能を使う「baseキーワード」とは?

インスタンス不要で使える「static(静的)」とは?

値を変えたくないときに使う「readonly / const(定数)」とは?

メソッドを渡せる仕組み「delegate(デリゲート)」とは?

「何かが起きたら知らせる」仕組み「event(イベント)」とは?

簡潔な書き方ができる「ラムダ式(Lambda Expression)」とは?

C#で使える「LINQ(言語統合クエリ)」とは?

エラーから安全に回復する「例外処理(try-catch-finally)」とは?

意図的にエラーを発生させる「throw(スロー)」とは?

名前空間やリソースを扱う「usingディレクティブ」とは?

クラスの整理に便利な「namespace(名前空間)」とは?

型を柔軟に扱う「ジェネリクス(Generics)」とは?

データの集まりを扱う「コレクション(List / Dictionary / HashSet)」とは?

処理を止めずに進める「非同期処理(async / await)」とは?

簡単に使えて便利!「自動実装プロパティ」と「プロパティ初期化子」