2011-08-02 16 views
0

大丈夫です。だから私は何をしたいのですか...配列の代理人としてステータスエフェクトのリストを格納しようとしています。状態はポケモンゲームの状態のように振る舞います。(Stunはあなたがターンを失うようにします)。Visual C#デリゲート配列

私は、この今のところ...それは、これは静的プロパティされていない文句だ

public class Statuses : Chara{ 
     public static void para(){ 
      this.health -= 10; 
     } 
    } 

    status[] statuses = new status[]{ 
     new status(Statuses.para) 
    }; 

は、私が進むべきかと思いましています。

ありがとうございました。

+6

「ステータス」を宣言しようとしている箇所、「ステータス」の種類、または「キャラ」の種類が何であるかは、明確ではありません。また、.NET命名規則に従うことを強くお勧めします。 –

答えて

0

コンパイラが不満を抱いている問題は、Paraというメソッドをstaticとマークしたことです。次に、thisを使用して現在のインスタンスのhealthプロパティにアクセスしようとしていますが、これは包含する方法がstaticであるため意味をなさないものです。

static keywordits usageでお読みください。私はあなたがやりたいことだと思い


は(あなたが財産healthで、pokemonと呼ばれるタイプを持っていると仮定)のラインに沿って、インスタンスの健康を低減delegateを作成することでした。

public class Statuses : Chara{ 
    public static Action<Pokemon> para = 
     (pokemonInstance) => { pokemonInstance.Health -= 10; }; 
} 

Action<Pokemon>[] statuses = new Action<Pokemon>[]{ 
    Statuses.para 
}; 

Action<T>およびAnonymous Methodsにお読みください。

+0

私は知っていますが、代理人は静的メソッドでしか使用できません。 – Corey

+0

代理人を割り当てることもできますし、私の場合は 'Action 'をインプレースに割り当てることもできます。上記のコードでは、 'pokemonInstance'という単一のパラメータを持つメソッドを作成しています。メソッドは健康度を10減らします。私はそのメソッドを 'para'静的変数に代入しています。 –

1

Statusesクラスをコンパイルすると、コンパイラエラーが発生する可能性があります。「キーワード 'this'は静的プロパティ、静的メソッド、静的フィールド初期化子では無効です」:これは静的な方法です。あなたのhealth変数が静的である場合は、次のように行うことができます。

private static int health; 
public static void para() 
{ 
    health -= 10; 
} 

healthが静的​​でない場合は、オブジェクト参照が非静的フィールド、メソッド、またはプロパティ「ステータスのために必要とされ、」このコンパイラエラーが発生します。健康'。

もう1つのエラーは、paraがプロパティではなくメソッドであることです。あなたが掲示したコードは文脈から非常に外れているので、さまざまな誤りがうまく現れることがあります。