2011-08-02 58 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

目前還不清楚你正在嘗試做什麼,你試圖聲明什麼狀態,什麼是status狀態或什麼是Chara類型。我還強烈建議您開始遵循.NET命名約定。 –

回答

0

編譯器抱怨的問題是,您已將方法Para標記爲static。然後,您嘗試使用this來訪問當前實例的health屬性,因爲包含的方法是static,所以無意義。

您應該閱讀static keywordits usage


我想你想要做的是創造一個delegate減少實例的健康,沿(假設你有一個名爲pokemon型,具有財產health)的線路:

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 'in-place。在我上面的代碼中,我創建了一個具有單個參數的方法,即'pokemonInstance'。該方法將減少10的健康。我將該方法分配給'para'靜態變量。 –

1

當編譯Statuses類時,最可能得到的編譯器錯誤全稱爲:「Keyword'this'在靜態屬性,靜態方法或靜態字段初始值設定項中無效」:不允許引用「這「在一個靜態的方法。如果您health變量是靜態的,你可以這樣做:

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

如果health也不是一成不變的,你會得到一個對象引用需要非靜態字段,方法或屬性「以下狀態此編譯器錯誤」。健康'。

另一個錯誤是你的para不是一個屬性,而是一種方法。由於您發佈的代碼非常隱蔽,因此可能會出現許多不同的錯誤。