0

説明しようと思います。私には3つのクラスがあります:EnemyTeleport、EnemyZigZag、EnemyNormal。それらはすべて基本クラスの敵を継承します。これらの3つのクラスには、それぞれ独自のconst->KillPointsがあります。

だから他のクラスでは。たとえば、フォームクラスの場合、これらの定数を取得する必要があります。これらのEnemyTeleport、EnemyZigZag、EnemyNormalは、public Enemy EnemyInstance; たとえば次の場所にあります。

EnemyInstance = new EnemyTeleport();

では、どうすればEnemInstanceからキルポイントを取得できますか?考えられる各バリアントを確認したくないですか?

より賢い方法はありますか?

のようにEnemInstance.GetType().KillPoints(動作しません)

また。EnemyInstanceは、EnemyTeleportを保持するEnemyタイプです。EnemyTeleportで一定の状態を維持

4

3 に答える 3

2

基本クラスの敵をKillPointsのプロパティで拡張してみませんか。継承されたクラスのコンストラクターで、KillPointsを特定の敵の特定の値に設定できます

しかし、それを基本クラスに入れたくない場合は、次のようにします。

KillPointsを特定の敵のプロパティとして次のようにします。

public class TeleportEnemy : Enemy
{
   public int KillPoints{get;private set;}
   public TeleportEnemy()
   {
      this.KillPoints = 666;
   }
}

EnemyのインスタンスによってKillpointsにアクセスするためのコードは次のようになります。

Enemy enemy = new TeleportEnemy();
        PropertyInfo propertyInfo = enemy.GetType().GetProperty("KillPoints");
        int value = (int)propertyInfo.GetValue(enemy, null);
于 2013-03-25T14:03:49.883 に答える
1

使用することをお勧めします

public abstract class Enemy
{
   public abstract List<int> KillPoints;
}

特定のクラスごとに、の値を定義しますKillPoints(TemplateMethodパターンを使用してKillPointsを計算できます)

リンク: http: //www.dofactory.com/Patterns/PatternTemplate.aspx

しかし、メインでは、サービスに基本クラスの敵を使用します

それで :

Enemy enemy = new EnemyTeleport();
var result = enemy.KillPoints;
于 2013-03-25T14:09:37.953 に答える
0

階層は次のように定義できます。Enemy具体的な敵がプロパティを実装している間、クラスがどのように抽象的であるかに注意してくださいKillPoints。メインの実装は抽象クラスについてのみ知っているEnemy必要がありますが、具体的な実装は、ゲーム内のフラグに応じて、他の場所で作成する必要があります。

public abstract class Enemy
{
    public abstract int KillPoints {get;}
}

public class EnemyTeleport : Enemy
{
    public override int KillPoints
    {
        get{return 6;}
    }
}

public class EnemyZigZag : Enemy
{
    public override int KillPoints
    {
        get{return 10;}
    }
}

今、あなたはへのポリモーフィック呼び出しを利用することができます KillPoints

private Enemy EnemyInstance;

void Main()
{
    EnemyInstance = new EnemyTeleport();

    Console.WriteLine(EnemyInstance.KillPoints);
}
于 2013-03-25T14:05:02.597 に答える