【发布时间】:2009-07-11 22:38:39
【问题描述】:
想象一下下面的情况。我有一个如下的 XML 文档,
<Form>
<Control Type="Text" Name="FirstName" />
<Control Type="DateTime" Name="DateOfBirth" />
<Control Type="Text" Name="PlaceOfBirth" />
</Form>
我有一个名为 Control 的抽象类,它有一个名为 Process 的抽象方法,它接受一个 HttpRequest 参数。我还有另外两个从 Control 派生的类,称为 TextControl 和 DateTimeControl。 Text 和 DateTime 都覆盖 Process 方法以提供它们自己的实现。
我还有一个 Form 类,它有一个采用 HttpRequest 类型的单个参数的 Process 方法,以及一个采用 XmlDocument 类型的单个参数的构造函数。
创建了一个新的 Form 实例,上面的 Xml 通过 XmlDocument 参数传入(我们如何从字符串到 XmlDocument 无关紧要)。然后,我在刚刚创建的 Form 实例上调用 Process 方法,并按预期传入一个 HttpRequest 类型的参数。
到目前为止一切顺利。现在进入问题。
为了使控件的处理可扩展,我希望能够将类映射到控件类型。
例如。
Form.RegisterControl("Text", Text)
Form.RegisterControl("DateTime", DateTimeControl)
在 Form 的 Process 方法中,我想迭代文档中的每个 Control 节点(如何做到这一点再次无关紧要)并根据我们的 RegisterControl 方法注册的类实例化与其类型匹配的类的实例.在这个阶段,我可以指定它们是从 Control 派生的,但不能明确指定它们的类型。因为它们都是从 Control 派生的,所以我想调用我知道会实现的 Process 方法。
这甚至可能吗?如果是这样,我会怎么做?
【问题讨论】:
标签: c# oop abstract-class