Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过.GetType()获取类常量_C#_Oop - Fatal编程技术网

C# 如何通过.GetType()获取类常量

C# 如何通过.GetType()获取类常量,c#,oop,C#,Oop,我会尽力解释的。 我有3门课:EnemyTeleport,EnemyZigZag,EnemyNormal。他们都继承了底层敌人。 这3个类中的每一个都有自己的常量->致命点 所以在另一节课上。例如表单类,我需要得到这些常量。 这些EnemyTeleport、EnemyZigZag、EnemyNormal位于公敌EnemyInstance中 比如说 EnemyInstance = new EnemyTeleport(); 那么我怎样才能从EnemInstance获得杀戮点呢?我不想检查每个可能的

我会尽力解释的。 我有3门课:EnemyTeleport,EnemyZigZag,EnemyNormal。他们都继承了底层敌人。 这3个类中的每一个都有自己的常量->致命点

所以在另一节课上。例如表单类,我需要得到这些常量。 这些EnemyTeleport、EnemyZigZag、EnemyNormal位于
公敌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;
}

将致命点放在基类中。不要把它放在每一个类中。你将不得不更具描述性,而不是“不起作用”将致命点放在基类中。不要把它放在每一个词里。你必须比“不起作用”更具描述性