【发布时间】:2023-03-23 11:26:01
【问题描述】:
我正在用 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做什么,但静态方法基本上不参与继承。) -
我不想在基类中设置纹理,因为每种对象类型(玩家、敌人等)都使用不同的类型,并且我想让每个类都保持静态以保存记忆。
-
每个基类对象中只有一个额外的变量 - 而不是每个基类对象的不同对象。您是否有任何证据表明一个额外的变量会给您带来重大问题?如果您真的不想要任何状态,那么实例之间的区别将 必须通过继承,因此您将 必须覆盖每个类中的方法或属性。你可以使用
Texture属性来做到这一点,它比Draw方法更简单,但你仍然需要在每个类中添加一些代码。
标签: c# class oop inheritance virtual-functions