0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】インターフェースとは?

Posted at

インターフェースとは?

インターフェースとは、
「こういうメソッドを持つべき」という約束だけを定義するものです。

クラスが「実際の処理」を持つのに対して、
インターフェースは「設計書」のような役割をします。

具体的な例

たとえば、「動物が鳴く」という共通の動作を持つ設計。

interface IAnimal
{
    void Speak();
}

この IAnimal インターフェースは「Speak() メソッドを持つこと」を約束しています。
でも、中身の実装(何を出力するか)は書かれていません。

クラスでインターフェースを実装する

このインターフェースを使いたいクラスは、interface を 実装 します。

class Dog : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("ワンワン!");
    }
}

class Cat : IAnimal
{
    public void Speak()
    {
        Console.WriteLine("ニャー!");
    }
}

DogCat はどちらも IAnimal を実装しています。
つまり、「Speak()メソッドを必ず持つ」という契約を守っているわけです。

実行

IAnimal dog = new Dog();
dog.Speak();  // 出力: ワンワン!

IAnimal cat = new Cat();
cat.Speak();  // 出力: ニャー!

変数の型はどちらも IAnimal ですが、
中身が DogCat かによって動作が変わります。

このように、インターフェースを通して共通の処理を扱えるのがポイント。

インターフェースのメリット

インターフェースを使うことで、クラス同士が「ゆるくつながる」ようになります。

たとえば、こんなコードを書いてもOK

void MakeItSpeak(IAnimal animal)
{
    animal.Speak();
}

このメソッドは、Dog でも Cat でも Bird でも、
IAnimal を実装していれば全部渡せます。

つまり、柔軟で拡張性の高いコードになるんです!

クラスの継承との違い

項目 継承(class) インターフェース(interface)
目的 機能を引き継ぐ 共通のルールを定める
中身 実装を含む 実装は書けない
継承数 1つまで(単一継承) 複数実装OK(多重実装)

つまり、
「機能を共有したい → 継承」
「ルールだけ共有したい → インターフェース」
と覚えておけばOKです。

複数インターフェースの実装

インターフェースは複数実装できます。

interface IAnimal
{
    void Speak();
}

interface IRun
{
    void Run();
}

class Dog : IAnimal, IRun
{
    public void Speak() => Console.WriteLine("ワンワン!");
    public void Run() => Console.WriteLine("走る!");
}

これで、Dog は「鳴けて走れる」動物になりました。

まとめ

用語 意味
interface ルールを定義する
class 実際の動作を実装する

インターフェースは「コードの設計力」を高める重要な仕組みです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?