2013-03-25 33 views
0

我會盡力解釋。我有3個職業:EnemyTeleport,EnemyZigZag,EnemyNormal。他們都繼承了基類敵人。 這3個類中的每一個都有他自己的const - > KillPoints。如何通過.GetType獲取類常量()

所以在其他類。例如Form Class,我需要獲取這些常量。 這些EnemyTeleport,EnemyZigZag,EnemyNormal位於public Enemy EnemyInstance; 例如

EnemyInstance = new EnemyTeleport(); 

所以,我怎麼能得到EnemInstance點殺?我不想檢查每個可能的變體?

有更聰明的方法嗎?

EnemInstance.GetType().KillPoints(不工作)

再次。 EnemyInstance是擁有EnemyTeleport的敵人類型。常量保持在EnemyTeleport

+1

在基類認沽KillPoints。不要把它放在每一個。 – 2013-03-25 14:03:35

+0

您必須比「不起作用」更具描述性 – tnw 2013-03-25 14:03:55

回答

0

你的層次可以被定義爲如下。請注意0​​類是如何抽象的,而具體的敵人如何實現屬性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); 
} 
+0

這工作,最佳答案:) – 2013-03-25 14:13:28

2

爲什麼不擴展你的基地級敵人的KillPoints屬性。在繼承類的構造函數可以設置KillPoints到某些敵人的具體數值

但是,如果你不想把它變成一個基類:

充分利用KillPoints作爲屬性在某些敵人,如:

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

的代碼被敵人的一個實例來訪問Killpoints樣子:

Enemy enemy = new TeleportEnemy(); 
     PropertyInfo propertyInfo = enemy.GetType().GetProperty("KillPoints"); 
     int value = (int)propertyInfo.GetValue(enemy, null); 
+0

謝謝你的好主意! :) – 2013-03-25 14:06:02

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;