0

我认为非常基本的问题。

 public class person {
    public string name;
    public int status;
    public int ability;

    public person() { }
    public person(string name, int status, int ability)
    {
        this.name = name;
        this.status = status;
        this.ability = ability;
    }

    public static int praise() {
        return ++status;
    }
}

我想用 C# 编写一个类,它具有将每个新类添加其“状态”的功能。但有一个错误,因为 'status' 不是 static 。我怎么解决这个问题?非常感谢您。

4

7 回答 7

5

看起来您正在尝试praise()增加特定人员的状态,这意味着它不应该是静态方法。

public int praise() {
    return ++status;
}

叫它你做

Person bob("bob", 0, 0);
bob.praise();
于 2012-06-08T14:35:08.430 回答
1

从方法声明中删除static修饰符:

public int praise() {
    return ++status;
}
于 2012-06-08T14:34:12.843 回答
1

问题是您试图在静态方法中增加成员变量。我将假设您不希望赞美()方法是静态的。如果是这种情况,您可以将赞美()方法更改为:

public int praise()
{
    return ++status;
}
于 2012-06-08T14:35:12.640 回答
1

你可能想要

public int praise(){
    return ++status;
}
于 2012-06-08T14:35:17.973 回答
1

这取决于您要达到的目标。

如果您status将类的所有实例设为静态,那么您的类的所有实例都将共享相同的状态变量:

public static int status;

如果你不让它成为静态你的类的每个实例都会有它自己的status变量

public int praise() {
    return ++status;
}
于 2012-06-08T14:36:12.797 回答
0

如何让你的领域静态?

public static int status;

另请注意,您应该使用属性而不是公共字段...


另一件事是,您status在类的构造函数中设置了字段。所以这个status领域的作用非常令人困惑。你真的想在多个实例之间共享它吗?

如果该status字段对于您的所有实例都不是通用的,那么您的praise方法可以将一个集合作为参数,并逐个person递增它们。status

也许你应该澄清你的问题。

于 2012-06-08T14:34:04.703 回答
0

您不能在静态上下文中引用非静态字段。您可以将其设为静态,但这取决于您的设计。

于 2012-06-08T14:34:17.560 回答