使虚拟基类成员在派生类中静态化

问题描述

我正在用MonoGame编写游戏,并且有一个entity类,几乎每个游戏对象都使用该类。尽管实体类没有自己定义的纹理,但在类中声明texture成员可以避免在每个子类中使用完全相同的代码覆盖某些虚函数,从而大大简化了代码。 / p>

例如,我目前必须将其放在我的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#中根本不可能?我知道我可以编写一个虚拟访问器函数并将其重写,但是我宁愿不必在每个子类中都编写它。

解决方法

this question中对此进行了很好的介绍,因此我将进行检查。 简而言之,您可以使用new static,只是不要将基类的方法标记为virtual。您还需要牢记new中的slightly different behavior和标准方法替代。

话虽如此,如果出于内存原因执行此操作,当前是否遇到问题?如果您不是这样,我会选择更干净,更易于维护的设计,然后担心出现问题时进行优化。

,

使虚拟基类成员在派生类中保持静态

不可能,期间。成员名称是唯一的,并且您不能按照C#规范将成员名称重新定义为静态。您可以将ANOTHER成员设置为静态成员,并使用对原始成员的最终替代来访问该成员,但这将保留该成员。

C#根本不支持这样的重新定义。

我可以编写一个虚拟访问器函数并将其重写,但是我宁可不必 将其写在每个子类中。

执行一个新的静态操作,并最终覆盖基本上使用该静态操作的操作。完成。