“当前上下文中不存在X”

时间:2015-09-02 23:45:39

标签: c#

我在班级Enemy下面有一个名为Program的班级(这是有Main的班级):

abstract public class Enemy
{
    public string name { get; set; }
    public int baseHealth { get; set; }
    public int baseAttackDamage { get; set; }
    public int baseMagicDamage { get; set; }
    public int level { get; set; }
    public int baseMoneyDropped { get; set; }
    public string damageType { get; set; }

    public int GenerateEnemyLevel()
    {
        Random genEnemyLevelModifier = new Random();
        int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
        return(getEnemyLevel);
    }
}

此代码的问题在于它说

  

播放器,在当前上下文中不存在于player.level中。

以下是player中的Main个实例,以及Player类上方的Enemy类。

//Player decleration
Player player = new Player();
player.level = 1;
player.id = 1

玩家类:

public class Player
{
    public string name { get; set; }
    public int id { get; set; }
    public string currentClass { get; set; }
    public int level { get; set; }
    public int experience { get; set; }

}

2 个答案:

答案 0 :(得分:3)

Player在此上下文中不存在:

public int GenerateEnemyLevel()
{
        Random genEnemyLevelModifier = new Random();
        int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
        return(getEnemyLevel);
}

您正在尝试设置对象的属性,但您所拥有的只是尚未实例化的Player类。

在面向对象编程中,您正在使用类的实例(称为对象)。在这种情况下,您没有Player的实例。

相反,请考虑使您的代码看起来像这样:

public int GenerateEnemyLevel(Player player)
{
        Random genEnemyLevelModifier = new Random();
        int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
        return(getEnemyLevel);
}
然后,您将把Player类的实例传递给方法。

例如:

Player p = new Player();

GenerateEnemyLevel(p);

编辑 -

对可行的方法的更详细解答。我不确定你为什么使用抽象类,但你可以考虑类似于以下内容:

abstract public class Enemy
{
    public string name { get; set; }
    public int baseHealth { get; set; }
    public int baseAttackDamage { get; set; }
    public int baseMagicDamage { get; set; }
    public int level { get; set; }
    public int baseMoneyDropped { get; set; }
    public string damageType { get; set; }
    public Player player { get; set;}

    public Enemy()
    {
        player = new Player();
    }

    public int GenerateEnemyLevel()
    {
        Random genEnemyLevelModifier = new Random();
        int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
        return(getEnemyLevel);
    }
}

通过将方法Enemy添加到抽象类中,您已经创建了一个构造函数。这在对象实例化时运行。请注意,您无法直接实例化抽象,您需要建立一些排序级别的继承,例如类似于此的实现:

public class BadGuy : Enemy
{
}

因此,如果你不想在早期就深入研究这些内容,我建议为了简单起见而删除抽象关键字。

答案 1 :(得分:1)

您的抽象敌人类没有任何player的引用。只需传递它应该工作的实例

   public int GenerateEnemyLevel(Player player)
        {
            Random genEnemyLevelModifier = new Random();
            int getEnemyLevel = genEnemyLevelModifier.Next(-3, 3) + player.level;
            return (getEnemyLevel);
        }