ポリモーフィズムの前提知識

 ポリモーフィズムは多態性、多様性などとも呼ばれます。ポリモーフィズムを実現させるためには次のような特徴を理解しておく必要があります。

 VC#は、クラスを作成すると暗黙のうちにObjectクラスのサブクラスとなります。つまり、Objectクラスのメソッドをどのクラスでも使用することができるわけです。どのようなメンバで構成されているかMSDNライブラリーで確認してみましょう。このような仕組みとなっているので、Object型の変数にはどんな種類のオブジェクトでも格納することができます。Object型は汎用型とも言えます。

 次のサンプルでは、車とバスのクラスのオブジェクトをCar型の変数に代入して、動作を確認します。

○ プロジェクト

 プロジェクトを作成して確認してみましょう。

プロジェクトの種類 コンソール アプリケーション
プロジェクト名 PolymorphismTest

サンプルダウンロード

○ 作成の準備

 「OverrideTest」プロジェクトより、Car.csとBus.csをコピーしてプロジェクトに追加してください。(2.3で作成した「InstanceTest」プロジェクトの作成方法を参考にしてください。)

○ プログラム

 次のようにMainメソッドにプログラムを追加してください。

Program.cs

  1. static void Main(string[] args)
  2. {
  3.  //Carクラス型の変数を用意
  4.  Car obj;
  5.  //Carオブジェクトを生成
  6.  obj = new Car();
  7.  Console.WriteLine("車のガソリン量:{0}リットル", obj.Gas);
  8.  //Busオブジェクトを生成
  9.  obj = new Bus();
  10.  Console.WriteLine("バスのガソリン量:{0}リットル", obj.Gas);
  11.  Console.ReadLine();
  12. }

○ 実行結果

車のガソリン量:20L
バスのガソリン量:100L

○ 解説

 14行目でCarクラス型の変数を宣言しています。そして17行目では、Carオブジェクトを生成して格納しています。ここでの使い方には変わった点はありません。21行目では、Busオブジェクトを生成して、Car型の変数に格納しています。BusクラスはCarクラスを継承しているので、このような記述が可能です。22行目ではガソリン残量を参照しています。Carクラスで定義しているメンバを利用することができます。ただし、Busクラスで定義しているメンバは利用できません。

 このように、一つの変数にいろいろな種類のオブジェクトを格納することができます。これを利用してポリモーフィズムを実現させます。

前へ   次へ