2012-06-08 18 views
0

我觉得很基本的问题。如何编写一个C#函数来添加这个类的arg?

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#编写一个类,它有一个函数来为每个新类添加他们的'状态'。但由于“状态”不是静态的,因此存在错误。我怎么解决这个问题?非常感谢你。

+1

明显的答案会让它变成静态的,不管你想不想要的是另一回事 – RhysW

+0

我认为你应该先决定你的课程设计。赞美()是静态的意味着地位将是所有人的共同财产,而不是一个人的地位。如果你打算为单人服务,那么你可能不希望它既不是静态方法,也不是静态属性。 – jcxavier

回答

0

如何让你的领域是静态的?

public static int status; 

也不要请注意,您应该使用公共字段的属性...


另一件事是,你在类的构造函数设置status领域。因此,status字段的作用非常混乱。你真的想要在多个实例之间共享吗?

如果status常见的所有实例的,那么你的praise方法可以采取person作为参数的集合,它们由一个status一个递增。

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

+0

它使this.status =状态错误。 – fisch

+0

这可能不是他想要的,这意味着每个人都有相同的地位,而不是每个人都有自己的地位。 –

+0

@Hans,是的,看到更新的问题。其实这并不清楚。 – ken2k

1

从方法声明中取出static修改:

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

在静态的情况下,不能引用非静态字段。你可以使它静态,但这取决于你的设计。

+3

'你不能在非静态情况下引用一个静态字段'是的,你可以,这是倒退。您不能在静态上下文中访问非静态字段。 – vcsjones

+0

@vcsjones:是的,这是正确的。我只喝了一盎司的咖啡,所以我的大脑仍然只是部分功能;) –

5

它看起来像你试图让praise()递增特定人的状态,这意味着它不应该是一个静态方法。

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

叫它你做

Person bob("bob", 0, 0); 
bob.praise(); 
+0

谢谢你,对! – fisch

1

的问题是,你想在一个静态方法来增加一个成员变量。我假设你不想让赞()方法是静态的。如果是这样的话,你可以改变的好评()方法:

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

你可能想

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

这取决于你正在努力acheive什么。

如果你让status静态所有的类的实例将共享相同的状态变量:

public static int status; 

,如果你不让它静态类的每个实例都将拥有自己的status变量

public int praise() { 
    return ++status; 
} 
相关问题