我会尽力解释。 我有3个班:EnemyTeleport,EnemyZigZag,EnemyNormal。他们都继承了基类敌人。 这3个类中的每一个都有自己的const - > KillPoints。
所以在其他课堂上。例如Form Class,我需要获得这些常量。
这些EnemyTeleport,EnemyZigZag,EnemyNormal位于public Enemy EnemyInstance;
例如
EnemyInstance = new EnemyTeleport();
那我如何从EnemInstance获得杀戮积分呢?我不想检查每个可能的变体?
有更聪明的方法吗?
赞EnemInstance.GetType().KillPoints
(没有工作)
再次。 EnemyInstance是Enemy类型,拥有EnemyTeleport。常数保留在EnemyTeleport
答案 0 :(得分:2)
为什么不使用KillPoints的属性扩展基类Enemy。在继承类的构造函数中,您可以将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);
答案 1 :(得分:1)
我建议您使用
public abstract class Enemy
{
public abstract List<int> KillPoints;
}
对于每个特定的类,定义KillPoints
的值(您可以使用TemplateMethod模式来计算您的KillPoints)
link:http://www.dofactory.com/Patterns/PatternTemplate.aspx
但是在你的Main中你使用基类Enemy作为你的服务
所以:
Enemy enemy = new EnemyTeleport();
var result = enemy.KillPoints;
答案 2 :(得分: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);
}