请看下面的情况。我有一个XML文档如下,动态铸造C#
<Form>
<Control Type="Text" Name="FirstName" />
<Control Type="DateTime" Name="DateOfBirth" />
<Control Type="Text" Name="PlaceOfBirth" />
</Form>
我有一个称为控制与单个抽象方法被称为过程需要的HttpRequest的单个参数的抽象类。我还有两个派生自Control的类,称为TextControl和DateTimeControl。 Text和DateTime都会覆盖Process方法以提供它们自己的实现。
我也有一个Form类,它有一个Process方法接受一个HttpRequest类型的参数,一个构造函数接受一个XmlDocument类型的参数。
创建Form的新实例,并通过XmlDocument参数传入上述Xml(我们如何从字符串获取到XmlDocument是无关紧要的)。然后,我调用刚刚创建的Form I实例的Process方法,并按预期方式传入类型为HttpRequest的参数。
目前为止都很好。现在回到这个问题上。
为了使控件的处理可扩展,我希望能够将类映射为控件类型。
例如。
Form.RegisterControl("Text", Text)
Form.RegisterControl("DateTime", DateTimeControl)
在形式的过程方法我想itterate在文档中的每个控制节点(如何做,这是再次不相关)和实例化,其基于注册的类相匹配的类型的类的一个实例通过我们的RegisterControl方法。我可以在这个阶段指定它们来自Control,但不能明确指定它们的类型。因为它们都是从Control派生的,所以我想调用我知道将实现的Process方法。
这甚至可能吗?如果是这样,我会怎么做呢?
谢谢乔恩!第一个答案应该是正确的(你假设正确)。我现在正在破解它! – 2009-07-11 23:14:56