見出し画像

『Unity C#基礎』 第十回: インターフェースとその活用

この記事では、C#のインターフェースについて学びます。インターフェースは、クラスや構造体が実装すべきメソッドやプロパティの仕様を定義するためのもので、オブジェクト指向プログラミングにおいて非常に重要な役割を果たします。


インターフェースとは?

インターフェースは、クラスや構造体に対して「どのような機能を持つべきか」を定義するための仕組みです。インターフェース自体は実装を持たず、実際の処理内容はそれを実装するクラスに委ねられます。インターフェースを使うことで、異なるクラス間で共通のメソッドやプロパティを持たせることができます。

インターフェースの定義

インターフェースは、interfaceキーワードを使用して定義されます。以下は、インターフェースの基本的な定義です。

public interface IMovable
{
    void Move();
}

このインターフェースIMovableには、Moveというメソッドが定義されています。このメソッドを持つクラスは、IMovableインターフェースを実装する必要があります。

インターフェースの実装

インターフェースを実装するクラスは、そのインターフェースで定義されたすべてのメソッドやプロパティを実装する必要があります。以下は、IMovableインターフェースを実装したクラスの例です。

public class Player : IMovable
{
    public string Name { get; set; }

    public Player(string name)
    {
        Name = name;
    }

    // インターフェースのMoveメソッドを実装
    public void Move()
    {
        Debug.Log(Name + "は移動した。");
    }
}

この例では、PlayerクラスがIMovableインターフェースを実装し、Moveメソッドを提供しています。これにより、Playerクラスはインターフェースで定義された移動の動作を持つことができます。

インターフェースの活用例

異なるクラス間で共通の動作を持たせる

インターフェースを使うことで、異なるクラスに共通の動作を持たせることができます。たとえば、PlayerEnemyという異なるクラスに、同じIMovableインターフェースを実装することができます。

public class Enemy : IMovable
{
    public string EnemyName { get; set; }

    public Enemy(string enemyName)
    {
        EnemyName = enemyName;
    }

    public void Move()
    {
        Debug.Log(EnemyName + "が移動した。");
    }
}

これで、PlayerEnemyも、共通のMoveメソッドを持つことができました。このように、異なるクラス間で同じインターフェースを実装することで、共通の振る舞いを持つことができます。

ポリモーフィズムとの併用

インターフェースは、ポリモーフィズムとも相性が良いです。例えば、IMovable型の変数に、PlayerEnemyなど、どちらのオブジェクトも代入することができます。

IMovable movableObject;

Player player = new Player("リリィ");
Enemy enemy = new Enemy("ゴブリン");

movableObject = player;
movableObject.Move(); // 出力: リリィは移動した。

movableObject = enemy;
movableObject.Move(); // 出力: ゴブリンが移動した。

このように、インターフェースを使うことで、異なる型のオブジェクトでも同じメソッドを呼び出すことができます。これがポリモーフィズムの力です。

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

C#では、1つのクラスが複数のインターフェースを実装することができます。これにより、クラスに多くの異なる機能を持たせることが可能です。

public interface IAttackable
{
    void Attack();
}

public class Player : IMovable, IAttackable
{
    public string Name { get; set; }

    public Player(string name)
    {
        Name = name;
    }

    public void Move()
    {
        Debug.Log(Name + "は移動した。");
    }

    public void Attack()
    {
        Debug.Log(Name + "が攻撃した。");
    }
}

この例では、PlayerクラスがIMovableIAttackableの2つのインターフェースを実装しています。MoveAttackという異なる動作を同じクラスで扱うことができ、柔軟な設計が可能になります。

まとめ

  • インターフェースは、クラスや構造体が実装すべきメソッドやプロパティの仕様を定義するものです。

  • インターフェースを使うことで、異なるクラスに共通の動作を持たせることができます。

  • ポリモーフィズムと組み合わせることで、異なる型のオブジェクトに同じメソッドを使うことができます。

  • 1つのクラスが複数のインターフェースを実装することも可能です。

次回は、抽象クラスインターフェースの違いについて学び、どちらを選ぶべきかを理解します。質問があれば、コメントでお知らせください!


この記事が気に入ったらサポートをしてみませんか?