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#でクラスを作成したいのですが、新しいクラスごとに「ステータス」を追加する機能があります。ただし、「ステータス」は静的ではないため、エラーが発生します。どうすればこの問題を解決できますか?どうもありがとうございます。

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

それはあなたが何を達成しようとしているかによって異なります。

statusstatic にすると、クラスのすべてのインスタンスが同じステータス変数を共有します。

public static int status;

静的にしない場合、クラスの各インスタンスには独自のstatus変数があります

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

フィールドを静的にするのはどうですか?

public static int status;

また、パブリック フィールドの代わりにプロパティを使用する必要があることに注意してください...


もう 1 つのことは、statusクラスのコンストラクターでフィールドを設定することです。そのため、フィールドの役割について非常に混乱していstatusます。実際に複数のインスタンス間で共有したいですか?

statusフィールドがすべてのインスタンスに共通ではない場合、praiseメソッドは のコレクションをpersonパラメーターとして取り、それらをstatus1 つずつインクリメントできます。

質問を明確にする必要があるかもしれません。

于 2012-06-08T14:34:04.703 に答える
0

静的コンテキストで非静的フィールドを参照することはできません。静的にすることもできますが、それは設計次第です。

于 2012-06-08T14:34:17.560 に答える