【问题标题】:an object is required for the non-static field非静态字段需要一个对象
【发布时间】:2015-05-19 06:52:44
【问题描述】:

这里真的没什么大不了的。我已将代码简化为无法编译的一小段。同样的错误是“非静态字段、方法或属性需要一个对象”。

public class Scorer
{   
    public enum ScoringCategory {FullHouse}

    public int getScore(ScoringCategory category)
    {
        return 1; 
    }
}

[TestClass]
public class ScoringTests
{
    [TestMethod]
    public void TestFullHouse()
    {                                    
        // Here is where I get the error
        int myScore = Scorer.getScore(Scorer.ScoringCategory.FullHouse);
    }
}

【问题讨论】:

  • Scorer scorer = new Scorer(); int myScore = scorer .getScore(Scorer.ScoringCategory.FullHouse);
  • 或添加静态:public static int getScore(ScoringCategory category)
  • 你的“Scorer”类不是静态的。

标签: c# enums compiler-errors arguments


【解决方案1】:

您需要创建一个Scorer 的实例,因为它是一个实例方法,它是在一个类型的实例上声明的,而不是在类型本身上(如static 方法) :

var scorer = new Scorer();
int myScore = scorer.getScore(Scorer.ScoringCategory.FullHouse);

【讨论】:

  • 谢谢!我正在从 C++ 过渡。
【解决方案2】:

您的方法 getScore 是类 Scorer 的实例方法。您需要先创建一个Scorer 类型的对象,然后才能使用该方法。

这可行:

public class Scorer
{   
    public enum ScoringCategory {FullHouse}

    public int getScore(ScoringCategory category)
    {
        return 1; 
    }
}

[TestClass]
public class ScoringTests
{
    [TestMethod]
    public void TestFullHouse()
    {                 
        // create an instance                   
        var scorerInstance = new Scorer();
        // call instance method getScore
        int myScore = scorerInstance.getScore(Scorer.ScoringCategory.FullHouse);
    }
}

【讨论】:

    【解决方案3】:

    我会从封装类中删除枚举并将其设为静态,以便您可以在尝试时使用它:

    public static enum ScoringCategory {FullHouse}    
    public class Scorer
    {
        public int getScore(ScoringCategory category)
        {
            return 1; 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多