3.4 インターフェイス

 C#でプログラミングインターフェイスを定義するには、その名の通りインターフェイスという機能を使います。インターフェイスには実装が欠けていることがかなり多いですが、C# 8.0では一部またはすべてのメソッドのデフォルト実装を定義する機能が追加され、ネスト型と静的フィールドを定義する機能も追加されました(ただし、インターフェイスは静的でないフィールドは定義できません)。クラスは実装するインターフェイスを選ぶことができます。インターフェイスと連携するコードを書くと、そのコードは1つの特定の型だけと連携するのではなく、そのインターフェイスを実装するすべてと連携できます。

 例えば、.NETクラスライブラリにはIEnumerable<T>というインターフェイスがあり、このインターフェイスは値の列を表現するために最低限必要なメンバの集合を定義しています(これはジェネリックインターフェイスなので、あらゆるものの列を表せます。例えば、IEnumerable<string>は一連の文字列です。ジェネリック型については「4章 ジェネリック型」で説明します)。メソッドがIEnumerable<string>型のパラメータを持つ場合、このインターフェイスを実装する任意の型のインスタンスへの参照を渡すことができます。つまり、1つのメソッドが配列、.NETクラスライブラリが提供するさまざまなコレクションクラス、特定のLINQ機能、およびその他多くのものと連携できるのです。

 インターフェイスはメソッド、プロパティ、イベントを宣言します。しかし、例3-93で示すようにその内容は定義する必要はありません。プロパティは、ゲッターやセッターが存在するかどうかを示しますが、本体の代わりにセミコロンがあるだけです。インターフェイスは、実際には型がそのインターフェイスを実装したい場合に用意する必要があるメンバのリストです。C# ...

Get プログラミングC# 第8版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.