C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#の明示的なインターフェイス実装とは?使いどころをわかりやすく解説

明示的なインターフェイス実装とは

C#では、1つのクラスが「同じシグネチャを持つメンバー」を含む複数のインターフェイスを実装することがあります。この場合、通常の方法でメンバーを実装すると、両方のインターフェイスが同一の実装を共有してしまうことになります。

そこで活用されるのが明示的なインターフェイス実装(Explicit Interface Implementation)です。これは、インターフェイス型を通じてのみ呼び出せるクラスメンバーを作成する手法で、インターフェイスごとに個別の実装を提供できます。

コード例

interface ICar{
    void display();
}
interface IBike{
    void display();
}
class ShowRoom : ICar, IBike{
    void ICar.display(){
        throw new NotImplementedException();
    }
    void IBike.display(){
        throw new NotImplementedException();
    }
}
class Program{
    static void Main(){
        Console.ReadKey();
    }
}

この例では、ShowRoomクラスがICarIBikeという2つのインターフェイスを実装しており、どちらにも同名のdisplay()メソッドが定義されています。

明示的な実装では、メソッド名の前にインターフェイス名を付ける(例:void ICar.display())ことで、各インターフェイスに固有の実装を分けて定義できます。

明示的な実装を使うメリット

  • シグネチャの衝突を解決できる: 同じ名前・引数のメンバーでも、インターフェイスごとに異なる処理を実装可能です。
  • メンバーを隠蔽できる: 明示的に実装されたメンバーは、クラスのインスタンスから直接呼び出せず、インターフェイス型にキャストした場合のみアクセスできます。
  • 公開APIをシンプルに保てる: クラス本来の用途に関係ないインターフェイスメンバーを、外部に露出させずに済みます。

まとめ

明示的なインターフェイス実装は、複数インターフェイス間でメンバー名が競合する場合や、特定のインターフェイス専用の動作を定義したい場合に有効なテクニックです。ただし、呼び出し時に必ずインターフェイス型へのキャストが必要になるため、乱用せず必要な場面で適切に使い分けることが重要です。

  1. Javaの抽象クラスとインターフェース、どちらを使うべき?使い分けのポイントを徹底解説

    Javaプログラミングにおいて、「抽象クラス」と「インターフェース」はどちらもオブジェクト指向設計に欠かせない要素ですが、それぞれ役割が異なります。インターフェースは契約(コントラクト)として振る舞いを定義し、システム間のやり取りの取り決めとしても機能します。一方、抽象クラスは主にサブクラスに対してデフォルトの動作を定義するために使われ、すべての子クラスが共通の機能を持つことを保証します。 抽象クラスを使うべきケース 継承を活用する場合: 抽象クラスは派生クラスに対して共通の基底クラス実装を提供できるため、継承の概念を利用する設計に適しています。 非公開メンバーを宣言したい場合: インターフ

  2. HDRとは?AndroidスマホでHDR撮影を使いこなす方法

    ここ数年でスマートフォンのカメラ性能は目覚ましい進化を遂げました。多くの人は従来のデジタルカメラを手放し、手軽さに優れたスマホでの撮影を選ぶようになっています。この変化を支えているのは、ハードウェアとソフトウェアの両面での進化です。スマホのカメラ機能が高度になるにつれ、写真に対してより細かくコントロールできるようになりました。現在のほとんどのAndroidスマホには「HDR」という設定項目がありますが、そもそもHDRとは何なのでしょうか。そして、どんなときに使うべきなのでしょうか。 HDRの仕組み HDRはハイダイナミックレンジ(High Dynamic Range)の略称です。「ダイナミッ