C# 如何通过.GetType()获取类常量
我会尽力解释的。 我有3门课:EnemyTeleport,EnemyZigZag,EnemyNormal。他们都继承了底层敌人。 这3个类中的每一个都有自己的常量->致命点 所以在另一节课上。例如表单类,我需要得到这些常量。 这些EnemyTeleport、EnemyZigZag、EnemyNormal位于C# 如何通过.GetType()获取类常量,c#,oop,C#,Oop,我会尽力解释的。 我有3门课:EnemyTeleport,EnemyZigZag,EnemyNormal。他们都继承了底层敌人。 这3个类中的每一个都有自己的常量->致命点 所以在另一节课上。例如表单类,我需要得到这些常量。 这些EnemyTeleport、EnemyZigZag、EnemyNormal位于公敌EnemyInstance中 比如说 EnemyInstance = new EnemyTeleport(); 那么我怎样才能从EnemInstance获得杀戮点呢?我不想检查每个可能的
公敌EnemyInstance中代码>
比如说
EnemyInstance = new EnemyTeleport();
那么我怎样才能从EnemInstance获得杀戮点呢?我不想检查每个可能的变体
有更聪明的方法吗
比如eneminInstance.GetType().KillPoints
(不起作用)
再说一遍。EnemyInstance是持有EnemyTeleport的敌人类型。EnemyTeleport中的常量保持不变你为什么不用致命点属性扩展你的基类敌人呢。在继承类的构造函数中,可以将KillPoints设置为特定类的特定值
但如果您不想将其放入基类:
将杀伤点作为特定敌人的财产,如:
public class TeleportEnemy : Enemy
{
public int KillPoints{get;private set;}
public TeleportEnemy()
{
this.KillPoints = 666;
}
}
通过敌方实例访问杀伤点的代码如下所示:
Enemy enemy = new TeleportEnemy();
PropertyInfo propertyInfo = enemy.GetType().GetProperty("KillPoints");
int value = (int)propertyInfo.GetValue(enemy, null);
你为什么不为你的基本敌人增加一个杀手点的属性呢。在继承类的构造函数中,可以将KillPoints设置为特定类的特定值
但如果您不想将其放入基类:
将杀伤点作为特定敌人的财产,如:
public class TeleportEnemy : Enemy
{
public int KillPoints{get;private set;}
public TeleportEnemy()
{
this.KillPoints = 666;
}
}
通过敌方实例访问杀伤点的代码如下所示:
Enemy enemy = new TeleportEnemy();
PropertyInfo propertyInfo = enemy.GetType().GetProperty("KillPoints");
int value = (int)propertyInfo.GetValue(enemy, null);
您的层次结构可以定义如下。注意,敌人
类是抽象的,而具体的敌人实现属性杀手点
。您的主要实现必须只知道抽象类敌人
,而具体实现应该在其他地方创建,这取决于游戏中的一些标志
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);
}
您的层次结构可以定义如下。注意,敌人
类是抽象的,而具体的敌人实现属性杀手点
。您的主要实现必须只知道抽象类敌人
,而具体实现应该在其他地方创建,这取决于游戏中的一些标志
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);
}
我建议你使用
public abstract class Enemy
{
public abstract List<int> KillPoints;
}
我建议你使用
public abstract class Enemy
{
public abstract List<int> KillPoints;
}
将致命点放在基类中。不要把它放在每一个类中。你将不得不更具描述性,而不是“不起作用”将致命点放在基类中。不要把它放在每一个词里。你必须比“不起作用”更具描述性