2012-06-08 21 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; 
} 
相關問題