簡體   English   中英

在派生類中使虛擬基類成員靜態化

[英]Making virtual base class members static in derived classes

我正在用 MonoGame 編寫一個游戲,並且有一個entity類,幾乎每個游戲對象都使用它。 雖然實體類沒有自己定義的紋理,但在該類中聲明texture成員將大大簡化代碼,因為無需在每個子類中使用完全相同的代碼覆蓋某些虛擬函數。

例如,我目前必須把它放在我的Entity類中:

public virtual void Draw() { }

然后在每個派生類中添加它:

public static Texture2D texture;
...
public override void Draw()
        {
            if (active)
                Game1._spriteBatch.Draw(texture, position, Color.White);
        }

我嘗試了各種各樣的東西,比如new static ,但它們沒有用。 有人可以提供幫助,還是在 C# 中根本不可能? 我知道我可以編寫一個虛擬訪問器函數並覆蓋它,但我寧願不必在每個子類中都編寫它。

這在這個問題中有很好的介紹,所以我會檢查一下。 簡而言之,您可以使用new static ,只是不要將基類的方法標記為virtual 您還需要記住new方法覆蓋和標准方法覆蓋的行為略有不同

話雖如此,如果您出於內存原因這樣做,您目前是否看到了問題? 如果不是,我會選擇更簡潔、更易於維護的設計,然后再擔心出現問題時的優化。

在派生類中使虛擬基類成員靜態化

不可能,期間。 成員名稱是唯一的,您不能根據 C# 規范將成員名稱重新定義為靜態。 您可以創建一個靜態的 ANOTHER 成員,並使用原始成員的最終覆蓋來訪問這個成員,但這會保留這個成員。

C# 根本不支持像這樣的重新定義。

我可以編寫一個虛擬訪問器函數並覆蓋它,但我寧願不必在每個子類中都編寫它。

然后做一個新的靜態一個和一個基本上使用靜態一個的最終覆蓋。 完畢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM