本文へスキップ
BecomeCoder

C#オブジェクト指向コース · 第1章 オブジェクト指向 · レッスン9

インターフェース

ブラウザで完結

導入

インターフェースは「このメソッドを持つ」という契約だけを定めた型です。実装は各クラスに任せ、「同じ契約を満たすなら差し替え可能」という柔軟な設計を可能にします。継承(is-a)と違い「〜できる(can-do)」を表します。

図解

flowchart TB
    I["interface IPayment<br/>Pay(amount) の契約"] --> C["CreditCard : IPayment"]
    I --> P["PayPay : IPayment"]
    USE["支払い処理"] -->|IPayment として扱う| I
    style I fill:#e1f5fe

サンプル

// IPayment 型として、実装クラスを差し替えて使える
IPayment payment = new CreditCard();
payment.Pay(1000);   // クレジットカードで1000円支払い

payment = new PayPay();
payment.Pay(500);    // PayPayで500円支払い

// interface: メソッドの「契約」だけを定義(中身は持たない)
interface IPayment
{
    void Pay(int amount);
}

// : で「この契約を実装する」と宣言
class CreditCard : IPayment
{
    public void Pay(int amount) => Console.WriteLine($"クレジットカードで{amount}円支払い");
}

class PayPay : IPayment
{
    public void Pay(int amount) => Console.WriteLine($"PayPayで{amount}円支払い");
}
  • interfaceは「持つべきメソッド」の契約だけを定める(実装なし)
  • クラスはclass C : IXxxで契約を実装する(複数のインターフェースを実装可能)
  • インターフェース型の変数に、契約を満たす任意の実装を代入できる=差し替え可能

演習

INotifier notifier = new EmailNotifier();
notifier.Send("こんにちは");

// TODO: INotifier インターフェース(Send(string) の契約)を定義し、
//       EmailNotifier で "メール送信: メッセージ" と出力する実装を作ってください
___
  • 期待される出力: メール送信: こんにちは
ヒント1を見る

interface INotifier { void Send(string message); }

ヒント2を見る

class EmailNotifier : INotifier { public void Send(string message) => Console.WriteLine($"メール送信: {message}"); }

まとめ

  • インターフェースは「できること」の契約だけを定める
  • クラスは契約を実装し、複数実装もできる
  • 契約を満たす実装を自由に差し替えられる(疎結合な設計の土台)

次回: オブジェクトに属さない「static メンバー」です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。