首页 > 解决方案 > 在派生类中使虚拟基类成员静态

问题描述

我正在用 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# 中根本不可能?我知道我可以编写一个虚拟访问器函数并覆盖它,但我宁愿不必在每个子类中都编写它。

标签: c#classoopinheritancevirtual-functions

解决方案


这个问题很好地涵盖了这一点,所以我会检查一下。简而言之,您可以使用new static,只是不要将基类的方法标记为virtual. 您还需要记住标准方法覆盖的行为略有不同。new

话虽如此,如果您出于记忆原因这样做,您目前是否遇到问题?如果你不是,我会选择更清洁和更易于维护的设计,然后担心出现问题时的优化。


推荐阅读