【发布时间】:2011-06-17 20:34:24
【问题描述】:
标题可能需要一些解释,所以这就是我想要做的:
- UI 元素的通用基本类型,例如基板
- 可以定义更多专门的元素,从 BasePanel 派生。例如,按钮和文本框。
- 将存储元素列表(BasePanel 类型,以便可以存储专门的元素)
- 此列表将遍历每一帧并绘制(暂时忽略优化)
示例用法:
class UIButton : BasePanel
{
public override void Draw(blah)
{
// Specialised drawing code
}
}
foreach (BasePanel Element in StoredElements)
{
Element.Draw(blah);
}
这样做的问题是它不会运行专门的代码;它只会运行 BasePanel 代码。 我该如何改进它以便它运行专门的代码?我可以将元素的类型存储在 BasePanel 上,然后在运行时转换为它吗?
我尝试将 BasePanel 存储在存储原始类型的 Container 类中,但我无法访问该方法 - 例如:
foreach(ElementContainer Container in StoredElements)
{
Type t = Container.OriginalType;
object el = Container.Element;
Convert.ChangeType(el, t); //Can't use the returned object!
t Element = (t)Convert.ChangeType(el, t); //This would be perfect, but it doesn't work.
}
感谢您的帮助。这让我的大脑爆炸了。
【问题讨论】:
-
你能检查一下 BasePanel.Draw() 是否被标记为虚拟?
-
我不明白。既然可以只存储派生类型,为什么还要使用 ElementContainer?
-
@Maxim 他只尝试使用容器来解决问题。
标签: c# types polymorphism base