Interface

interface とは?

  • ある class がどのような、メンバー(メソッド、フィールド、プロパティー)を持つのかの定義を与えるためのモノ
  • interface を継承した class は、interface で定義されてるメンバーを実装しなければならない(しないとコンパイルエラー)
  • なので、interface を使って、class が何を実装するのかを規定できる

文法

public interface ISample {
    // メソッド
    void Method();

    // フィールド
    int Field;

    // プロパティー
    int Property { get; set; }

    // getter のみを規定したプロパティー、setter は実装してもしなくてもいい
    int ReadOnlyProperty { get; }
}
  • interface 自身にアクセス修飾子はあるが、中身には無い(定義したものは全て public
  • interface を継承した interface も定義できる。(class と同じように IChild : IParent という表記)

実装側

明示的な interface の実装

interface の使われ方

interface には大きく2種類のの使われ方がある

  • 何がしかの機能を持つもの
  • 何がしかの様に振る舞うもの

何がしかの機能を持つもの

  • interface の名前は I + [ 動詞 ] + able になる
    • IEnumerable<T>, IDisposable

何がしかの様に振る舞うもの

  • interface の名前は I + [ 名詞 ] になる
    • IList, iCollection

よく使われる interface

namespace interface 用途 リンク
System.Collections.Generic IEnumerable<T> MSDN

interface の使いドコロ

テストしやすいライブラリ

  • interface は実装を持たず、振る舞いだけを定義することから、戻り値や引数を実装された class で指定せずに interface で与えることによって、テスト時には用意しやすいもので置き換えることができる。