インターフェイス

 ポリモーフィズムを実現させるにはいくつかの方法があります。ここでは、インターフェイスについてみてみましょう。インターフェイスは、抽象メソッドや抽象プロパティなどで構成されます。インターフェイスは「interface」キーワードを使って定義します。

インターフェイス定義の書式
interface クラス名
{
 抽象メソッド・抽象プロパティ定義…
}

 インターフェイスはインスタンスを生成できません。別のクラスで実装し、抽象メソッド等をオーバーライドして利用することができるようになります。 実装はクラスを継承のように記述しますが、カンマ区切りで複数指定することができます。

インターフェイス実装の書式1
class クラス名
 : インターフェイス名, インターフェイス名…
{
 各種定義…
 抽象メソッドのオーバーライド
}

インターフェイス実装の書式2
class サブクラス名
 : スーパークラス名, インターフェイス名…
{
 各種定義…
 抽象メソッドのオーバーライド
}

○ プロジェクト

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

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

サンプルダウンロード

○ インターフェイス作成

 ソリューションエクスプローラーより、プロジェクト名を右クリックし、「追加(D)」―「新しい項目(D)...」をクリックします。

新しい項目を追加する
新しい項目を追加する

 「新しい項目の追加」より「テンプレート」で「インターフェイス」を選択します。ファイル名を、作成したいインターフェイス名とします。今回は、「IDrip」という名前のインターフェイスを作成します。ファイル名を入力し、「追加」ボタンをクリックします。

インターフェイス作成の設定
インターフェイス作成の設定

 すると、インターフェイスが作成されます。

インターフェイスのスケルトン
インターフェイスのスケルトン

○ プログラム

 インターフェイスを作成しましょう。今回はドリップを表すインターフェイスを作成します。このインターフェイスは、主に飲み物に実装させる予定です。実装したクラスでは飲み物の注ぎ方を定義させます。

IDrip.cs

  1. interface IDrip
  2. {
  3.  string Drip();
  4.  string DripWithMilk();
  5. }

○ クラス図

○ 解説

 11~12行目で、抽象メソッドを宣言しています。メソッドの仕様は決まっているので、このメソッドを使用するにはオーバーライドして処理を実装する必要があります。

○ プログラム

 次に、ドリップインターフェイスを実装したコーヒークラスを作成しましょう。

Coffee.cs

  1. class Coffee
  2.  : IDrip
  3. {
  4.  //フィールド
  5.  private string name = "コーヒー";
  6.  //注ぐメソッドをオーバーライド
  7.  public string Drip()
  8.  {
  9.   return this.name;
  10.  }
  11.  //ミルクと一緒に注ぐメソッドをオーバーライド
  12.  public string DripWithMilk()
  13.  {
  14.   return "ミルク" + this.name + "(微糖)";
  15.  }
  16. }

○ クラス図

○ 解説

 16~19行目では、IDripインターフェイスのDripメソッドをオーバーライドしています。このメソッドはフィールドに設定されている飲み物を返します。今回はコーヒーが注がれるイメージとして文字列を返しています。

 21~25行目では、IDripインターフェイスのDripWithMilkメソッドをオーバーライドしています。このメソッドはミルクとコーヒーを返すことでミルクコーヒーを注ぎます。

○ プログラム

 では次にCoffeeクラスを利用するプログラムを作成しましょう。次のように記述してください。

Program.cs

  1. static void Main(string[] args)
  2. {
  3.  //珈琲オブジェクトを生成
  4.  Coffee coffee = new Coffee();
  5.  //珈琲を注いでみる
  6.  Console.WriteLine("Drip:{0}", coffee.Drip());
  7.  //ミルクも一緒に注いでみる
  8.  Console.WriteLine("DripWithMilk:{0}", coffee.DripWithMilk());
  9.  Console.ReadLine();
  10. }

○ 解説

 14行目では、珈琲オブジェクトを生成しています。そして、17行目と20行目でオーバーライドしたメソッドを呼び出しています。

○ 実行結果

Drip:コーヒー
DripWithMilk:ミルクコーヒー(微糖)

 今回のようにインターフェイスを実装したオブジェクトは1つだけ利用してもあまり意味がありません。複数のオブジェクトで実装させることで効果が出てきます。次の節でその効果を確認してみましょう。

前へ   次へ