返回基类的方法返回子类调用?

Wil*_*mas 2 c# inheritance xna return base

我正在创建一个C#框架,其中(几乎)我的所有类都将基于单个抽象基类.该基类包含一些私有设置属性,其中一个属性是布尔垃圾.

在XNA的绘制循环中,如果基类的Garbage属性设置为true ,我不希望任何子类在它们各自的Draw()方法中执行代码.我尝试使用以下实现执行此操作:

抽象基类:

public virtual void Draw(GameTime GameTime, SpriteBatch SpriteBatch)
{
    if (Garbage) return;
}
Run Code Online (Sandbox Code Playgroud)

继承类:

public void Draw(GameTime GameTime, SpriteBatch SpriteBatch, Color OverlayColor, float Scale)
{
    base.Draw(GameTime, SpriteBatch);

    //Other code here...
}    
Run Code Online (Sandbox Code Playgroud)

因为基类的Draw方法是在我的子类中的实际代码之前调用的,所以它命中了返回语句,我希望将其贯穿到我的子类的Draw()调用中.但是,这种情况并没有发生.

有没有办法达到我想要的效果,而不添加"if(Garbage)return;" 限制到每个继承类的Draw()方法的顶部?

Eri*_*ich 5

您可能考虑的一件事是有两种方法.您可以在抽象基础上使用Draw方法,该方法不会被覆盖,然后定义一个名为PerformDraw()的抽象受保护方法,您的继承者会覆盖它.

抽象基础绘图看起来像:

public void Draw(GameTime GameTime, SpriteBatch SpriteBatch)
{
    if (!Garbage) PerformDraw(GameTime, SpriteBatch);
}
Run Code Online (Sandbox Code Playgroud)

这允许您覆盖绘制行为,但强制所有继承者使用"垃圾"检查.