问题描述
我正在用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#根本不支持这样的重新定义。
我可以编写一个虚拟访问器函数并将其重写,但是我宁可不必 将其写在每个子类中。
执行一个新的静态操作,并最终覆盖基本上使用该静态操作的操作。完成。