C#インターフェイスをマスターする:定義、実装、実践的なユースケース
C#インターフェイスの解説
このガイドでは、C#インターフェイスの基礎から作成・実装方法、そして実際の開発現場で威力を発揮するシナリオまでを網羅的に解説します。
C#インターフェイスとは?
C#におけるインターフェイスは、メソッド、プロパティ、イベント、インデクサーのセットを定義する「契約」であり、実装を一切含みません。抽象クラスとは異なり、インターフェイスのすべてのメンバーは暗黙的に abstract かつ public となります。この特性により、互いに無関係な複数のクラスが共通の機能を共有する際に最適な仕組みとなっています。
- 命名規則: インターフェイス名には先頭に「I」を付与します(例:
IPolygon)。一目でインターフェイスだと分かるようにするためです。 - アクセス修飾子: インターフェイス内部ではメンバーにアクセス修飾子を指定できません。常に
public扱いになります。 - フィールド不可: インターフェイスにフィールドを宣言することはできません。
interface IPolygon { void CalculateArea(); }
インターフェイスの実装
インターフェイスを利用するには、クラスがそのインターフェイスを実装し、定義されているすべてのメンバーに具体的な実装を提供する必要があります。継承と同様にコロン(:)構文を使用します。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea(int length, int breadth);
}
class Rectangle : IPolygon {
public void CalculateArea(int length, int breadth) {
int area = length * breadth;
Console.WriteLine($"Area of Rectangle: {area}");
}
}
class Program {
static void Main(string[] args) {
Rectangle rect = new Rectangle();
rect.CalculateArea(100, 200);
}
}
}
出力
Area of Rectangle: 20000
複数インターフェイスの実装
C#では、1つのクラスが複数のインターフェイスを同時に実装できます。これにより、型の多重継承に相当する機能が実現されます。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea(int a, int b);
}
interface IColor {
void GetColor();
}
class Rectangle : IPolygon, IColor {
public void CalculateArea(int a, int b) {
int area = a * b;
Console.WriteLine($"Area of Rectangle: {area}");
}
public void GetColor() {
Console.WriteLine("Red Rectangle");
}
}
class Program {
static void Main(string[] args) {
Rectangle r = new Rectangle();
r.CalculateArea(100, 200);
r.GetColor();
}
}
}
出力
Area of Rectangle: 20000 Red Rectangle
インターフェイス参照の活用
インターフェイス自体を直接インスタンス化することはできませんが、インターフェイス型の変数を宣言し、それを実装クラスのインスタンスで参照できます。これはポリモーフィズムを実現する強力な手法です。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea(int length, int breadth);
}
class Rectangle : IPolygon {
public void CalculateArea(int length, int breadth) {
int area = length * breadth;
Console.WriteLine($"Area of Rectangle: {area}");
}
}
class Program {
static void Main(string[] args) {
IPolygon poly = new Rectangle();
poly.CalculateArea(100, 200);
}
}
}
出力
Area of Rectangle: 20000
実践例: ポリモーフィックな図形計算
以下では IPolygon インターフェイスを定義し、それを実装する2つの具体的な図形クラスを作成します。各図形は独自に面積を計算します。
using System;
namespace CsharpInterface {
interface IPolygon {
void CalculateArea();
}
class Rectangle : IPolygon {
public void CalculateArea() {
int length = 30;
int breadth = 90;
int area = length * breadth;
Console.WriteLine($"Area of Rectangle: {area}");
}
}
class Square : IPolygon {
public void CalculateArea() {
int side = 30;
int area = side * side;
Console.WriteLine($"Area of Square: {area}");
}
}
class Program {
static void Main(string[] args) {
Rectangle rect = new Rectangle();
rect.CalculateArea();
Square sq = new Square();
sq.CalculateArea();
}
}
}
出力
Area of Rectangle: 2700 Area of Square: 900
なぜC#インターフェイスを使うのか?
- 抽象化: 実装を規定せず契約のみを定義するため、開発者はクラスが「どう実装するか」ではなく「何をすべきか」に集中できます。
- 仕様の保証: インターフェイスを実装するクラスは、宣言されたメソッドを必ず提供することが保証されるため、コードベース全体で一貫性が確保されます。
- 多重継承の代替: C#はクラスの多重継承をサポートしていませんが、インターフェイスにより複数の機能を1つのクラスで採用できます。
- 疎結合: 具体的なクラスではなくインターフェイスに依存するコードは、より柔軟で保守・テストが容易になります。
C言語
- 長い driveway 向けの信頼性の高いワイヤレスセンサー - Raspberry Piとの簡単統合
- SPICEでのコマンドラインインターフェースの使い方
- C#のインターフェース:堅牢なオブジェクト指向設計のための契約定義
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Javaコレクションフレームワーク入門:主要インターフェースと実装クラス
- Java Collectionインターフェース:核心概念と必須メソッド
- Java Queueインターフェース完全マスター:メソッド、実装クラス、実践的活用
- Java NavigableSetインターフェースをマスター:ナビゲーション、ソート、実践例
- Javaラムダ式完全ガイド:基礎からStream APIまで
- Javaインターフェース完全ガイド: 定義・実装・多重継承・タグインターフェース
- Java 9プライベートインターフェースメソッド:カプセル化とコード再利用を強化