如何解决使虚拟基类成员在派生类中静态化
我正在用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#根本不支持这样的重新定义。
我可以编写一个虚拟访问器函数并将其重写,但是我宁可不必 将其写在每个子类中。
执行一个新的静态操作,并最终覆盖基本上使用该静态操作的操作。完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。