異なるメソッドとプロパティを持つ1つのインターフェイスからの異なるオブジェクト

LukášHasprún

これが私のインターフェースです

interface IEnemy
    {
        int Health { get; set; }
    }

そしてそれから派生するいくつかのクラス

public class Goblin : IEnemy
    {
        public int Health { get; set; }
        public Goblin()
        {
            Health = 50;
            Console.WriteLine("You encounter an Enemy Goblin!");
        }
    }
public class Undead : IEnemy
    {
        public int Health { get; set; }
        public Undead()
        {
            Health = 100;
            Console.WriteLine("You encounter an Enemy Undead!");
        }
    }
public class Orc : IEnemy
    {
        public int Health { get; set; }
        public Orc()
        {
            Health = 150;
            Console.WriteLine("You encounter an Enemy Orc!");
        }
    }

そして、スポーンする敵を選択するランダマイザーを作りたいとしましょう---私はこのようなものを作ります

IEnemy enemy = new Goblin() or Undead() or Orc()...

そして、すべてが意図したとおりに機能しますが、たとえば、1つのオブジェクト(たとえばゴブリン)にインターフェイスにないメソッドがある場合、敵のタイプがIEnemyの場合、そのメソッドを呼び出すにはどうすればよいですか?

OlivierJacot-Descombes

あなたは書ける

if (enemy is Goblin goblin) {
    goblin.CallGoblinMethod();
}

しかし、問題はこれが良いデザインであるかどうかです。異なるオブジェクトで異なる方法で実装される、普遍的な「味」を持つメソッドを持つことが望ましいでしょう。一部のオブジェクトでは空になることもあります。

または、別のインターフェースを介して動作を一般化することもできます

interface IThief
{
    void Steal();
}

public class Goblin : IEnemy, IThief
{
    public int Health { get; set; }
    public Goblin()
    {
        Health = 50;
        Console.WriteLine("You encounter an Enemy Goblin!");
    }

    public void Steal()
    {
        //TODO: steal
    }
}

このように、敵がゴブリンであることを知る必要さえありません。同じ能力を持つ他のクリーチャーがゲームの進化に現れる可能性があります。

if (enemy is IThief thief) {
    thief.Steal();
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

インターフェイスからのメソッドは1つのパラメーターを取りますが、2つの異なるオブジェクトで使用されます

分類Dev

異なるタイプのジェネリックパラメーターを持つメソッドを持つジェネリッククラス

分類Dev

インターフェイス内の異なるアクセサを持つ自動プロパティ

分類Dev

異なるプロパティを持つ2つのオブジェクトをマージする方法

分類Dev

異なるjsファイルのオブジェクトにプロパティとメソッドを追加する

分類Dev

1つのオブジェクトタイプのみが異なる2つのScalaメソッドを減らします

分類Dev

異なるコンストラクターを持つメソッドで特定のオブジェクトタイプのオブジェクトを作成する方法

分類Dev

有効なプロパティ名のリストから1つだけのプロパティを持つオブジェクトのタイプ

分類Dev

異なるオブジェクトメソッドを持つマングースマルチタイプスキーマ

分類Dev

CrudRepository インターフェースを使用して、異なるタイプのオブジェクトを返すメソッドを自動実装する

分類Dev

(異なる長さの)オブジェクトの配列を、元の配列の要素とは異なるプロパティを持つ1つのオブジェクトに変換するにはどうすればよいですか?

分類Dev

異なるメソッドは、1つのオブジェクトに異なる属性を必要とします

分類Dev

Pythonで異なるプロパティを持つ新しいオブジェクトインスタンスを生成する

分類Dev

いくつかの既知であるがオプションのプロパティ名といくつかの未知のプロパティ名を持つオブジェクトのTypescriptインターフェイス

分類Dev

UIView とそのサブクラスの異なるメソッドを持つ同じプロパティ

分類Dev

クラスは異なるがプロパティが類似している2つのオブジェクトをバインドする

分類Dev

1つのビジュアルスタジオソリューションに、異なるタイプの2つのプロジェクト(デスクトッププロジェクトとWebプロジェクト)を含めることはできますか?

分類Dev

1つのインターフェースメソッドの異なるタイプの実装

分類Dev

C#JSON-同じプロパティを持つ異なるタイプの複数のオブジェクトのシリアル化

分類Dev

1つのメソッドから異なるオブジェクトを作成する

分類Dev

異なるメソッドパラメータを持つJavaインターフェイス

分類Dev

異なる構造を持つことができるオブジェクトパラメータのタイプを定義する

分類Dev

Haskellの異なるパラメータタイプを持つ多数のオブジェクトへのポリモーフィック関数の適用を乾かす方法はありますか?

分類Dev

異なるプロパティを持つオブジェクトの配列を再帰的にフィルタリングします

分類Dev

javascriptの新しいキーワードを持つ1つのオブジェクトにプロパティとメソッドを与える方法は?

分類Dev

インターフェイスのジェネリックメソッドなしでプロパティを初期化することは可能ですか?

分類Dev

同じカスタム名と異なるベースパスを持つ異なるリージョンからの複数のAPIゲートウェイ

分類Dev

教義: 2 つのエンティティのオブジェクトを異なる句を持つ 2 つのテーブルから取得する方法は?

分類Dev

Javaは、クラスのフィールドとして2つの異なるオブジェクトタイプを使用します

Related 関連記事

  1. 1

    インターフェイスからのメソッドは1つのパラメーターを取りますが、2つの異なるオブジェクトで使用されます

  2. 2

    異なるタイプのジェネリックパラメーターを持つメソッドを持つジェネリッククラス

  3. 3

    インターフェイス内の異なるアクセサを持つ自動プロパティ

  4. 4

    異なるプロパティを持つ2つのオブジェクトをマージする方法

  5. 5

    異なるjsファイルのオブジェクトにプロパティとメソッドを追加する

  6. 6

    1つのオブジェクトタイプのみが異なる2つのScalaメソッドを減らします

  7. 7

    異なるコンストラクターを持つメソッドで特定のオブジェクトタイプのオブジェクトを作成する方法

  8. 8

    有効なプロパティ名のリストから1つだけのプロパティを持つオブジェクトのタイプ

  9. 9

    異なるオブジェクトメソッドを持つマングースマルチタイプスキーマ

  10. 10

    CrudRepository インターフェースを使用して、異なるタイプのオブジェクトを返すメソッドを自動実装する

  11. 11

    (異なる長さの)オブジェクトの配列を、元の配列の要素とは異なるプロパティを持つ1つのオブジェクトに変換するにはどうすればよいですか?

  12. 12

    異なるメソッドは、1つのオブジェクトに異なる属性を必要とします

  13. 13

    Pythonで異なるプロパティを持つ新しいオブジェクトインスタンスを生成する

  14. 14

    いくつかの既知であるがオプションのプロパティ名といくつかの未知のプロパティ名を持つオブジェクトのTypescriptインターフェイス

  15. 15

    UIView とそのサブクラスの異なるメソッドを持つ同じプロパティ

  16. 16

    クラスは異なるがプロパティが類似している2つのオブジェクトをバインドする

  17. 17

    1つのビジュアルスタジオソリューションに、異なるタイプの2つのプロジェクト(デスクトッププロジェクトとWebプロジェクト)を含めることはできますか?

  18. 18

    1つのインターフェースメソッドの異なるタイプの実装

  19. 19

    C#JSON-同じプロパティを持つ異なるタイプの複数のオブジェクトのシリアル化

  20. 20

    1つのメソッドから異なるオブジェクトを作成する

  21. 21

    異なるメソッドパラメータを持つJavaインターフェイス

  22. 22

    異なる構造を持つことができるオブジェクトパラメータのタイプを定義する

  23. 23

    Haskellの異なるパラメータタイプを持つ多数のオブジェクトへのポリモーフィック関数の適用を乾かす方法はありますか?

  24. 24

    異なるプロパティを持つオブジェクトの配列を再帰的にフィルタリングします

  25. 25

    javascriptの新しいキーワードを持つ1つのオブジェクトにプロパティとメソッドを与える方法は?

  26. 26

    インターフェイスのジェネリックメソッドなしでプロパティを初期化することは可能ですか?

  27. 27

    同じカスタム名と異なるベースパスを持つ異なるリージョンからの複数のAPIゲートウェイ

  28. 28

    教義: 2 つのエンティティのオブジェクトを異なる句を持つ 2 つのテーブルから取得する方法は?

  29. 29

    Javaは、クラスのフィールドとして2つの異なるオブジェクトタイプを使用します

ホットタグ

アーカイブ