首先,讓我明確一點,這不是虛擬靜態爲什麼不起作用的另一個問題,因此請避免回答編譯器如何看到虛擬和靜態或將其標記爲這些問題的重複,但是如果您知道任何符合我的示例的答案,請隨時鏈接並標記重複。實現「虛擬靜態」可能有什麼好方法?使用簡單的示例案例
現在,通過摸索如何實現的東西,會一直用此方式解決,也就是很多人說:「我甚至不知道你爲什麼會需要做的」和人們想的幾個例子問同樣的問題,因爲我有很多不同的例子,所以我很難與其他人的答案聯繫起來。
所以,在這個遊戲中,我想讓我有一個簡單的Inventory
和Item
系統。從virtual class
每Item
繼承了Inventory
類可以識別
public class Item {
public virtual static Sprite getIcon();
public virtual static string getName();
}
public class Stone : Item {
static Sprite icon;
static string name = "Stone";
public override static Sprite getIcon(){
return icon;
}
public override static string getName(){
return icon;
}
// ...
}
所以思想基本上是每一個Stone
股在Inventory
相同icon
和所有的石頭具有相同的名稱/標題,說使用調試消息或給玩家一些他正在看或正在拾取的信息。
現在我所有的勇氣告訴我,最好的做法是,Sprite
應該是static
,因爲在Inventory
的Stone
所有實例應該表現出同樣的icon
。但是,各種物品也應該有Sprite
,因此他們應該用inherit
共同get
-方法來檢索這些。
於是我想出了兩個備選方案感到傳統錯誤或overkillishly錯誤。
1)使get
- 方法非static
,讓他們返回靜態成員的內容。這是非常規的,因爲它會爲每個實例返回值相同的每個實例的開銷。
編輯:糾正,沒有額外的開銷,因此這種方法是要走的路。
2)請存儲所有的精靈/名稱和基於給定對象的類型返回他們一些大師班。首先,我不喜歡使用類型比較/檢查,因爲我覺得如果可以的話,最好避免這樣做。但即便如此,我覺得像這樣的解決方案是矯枉過正這些瑣碎的任務返回一個string
或Sprite
參考
所以,除非我失去了一些東西,有沒有實現這一點的直接的方法是什麼?還是我的兩種方法之一比我認爲的要好?
PS:我要實現這一個團結的比賽,因此,如果統一提供的解決方案我所有的耳朵。
*這是非常規的,因爲它會爲類的每個實例開銷,而每個實例的返回值都是相同的。*虛擬方法沒有每個實例的開銷。 – PetSerAl
@PetSerAl我可能使用了錯誤的術語。但是你是否認爲沒有內存/性能的缺點讓所有的方法都不使用靜態方法? – Chexxor
@Chexxor正確,沒有任何懲罰,只需製作一個引用私有靜態字段的普通虛擬方法即可。 –