gpt4 book ai didi

c# - 在虚方法的所有覆盖之后执行代码

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:16 25 4
gpt4 key购买 nike

所以我用基类 DisplayObject 设置了这个系统。它有一个 Render 方法和一个其他 DisplayObjects 的列表作为它的 child 。它还包含有关各种矩阵变换的数据,但我包含有关实际绘图的数据。这就是为什么 Render 方法是虚拟的。

然后我有 2 节课。 ColoredShapeTexturedShape 均继承自 DisplayObject 并使用以

开头的新方法覆盖 Render 方法
base.Render(); 

然后做绘图代码。

我现在想要的是在对象的所有子对象上调用Render父对象的 Render 完成后。所以这是我的问题。如果我这样做

foreach (var child in Children) child.Render();

DisplayObject 类的 Render 方法末尾,它将在覆盖之前执行,因为它是 base.Render( ) 调用,如果我将该代码放在子类中,则 DisplayObject 会单独失去该功能,并且它会强制从它继承的所有 future 子类手动实现该功能。

最佳答案

你要的是抽象方法模式。换句话说,不要让你的 render 方法 virtual crate 另一个渲染调用的方法(虚拟的或抽象的)。所以 render 看起来像这样:

public void Render()
{
DoRender()

foreach (var child in _children)
{
child.Render();
}
}

protected virtual void DoRender()
{
}

关于c# - 在虚方法的所有覆盖之后执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8023868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com