非静态字段需要一个对象

本文关键字:一个对象 字段 静态 | 更新日期: 2023-09-27 17:49:54

这里真的没有太多事情要做。我已经将代码简化为这一小段无法编译的代码。同样,错误是"非静态字段、方法或属性需要对象"。

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的实例,因为它是一个实例方法,它是在类型的实例上声明的,而不是类型本身(如static方法):

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

你的方法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);
    }
}

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

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