把孩子当作父母,然后作为直接孩子c#

时间:2013-07-23 19:23:13

标签: c# casting parent-child

我无法将父类强制转换为子级 - 不断获得无效的强制转换异常。

我无法克服这个问题,我会集体帮助。

我正在开发一个创建某些文档的应用程序。共有20个文件。 19是唯一的,一个是通过扩展它的内容而衍生出来的。所有证书都有公共标题信息和特定于文档的正文。

所以我创建了Document类。我从不直接实例化Document课程,只能通过其子女。 19个文件直接来自Document类。 Document类定义所有文档共有的所有字段和属性以及访问SQL数据库的方法。每个Document(子)的构造函数,当启动到无参数调用Document的(父)构造函数时传递一个整数,帮助构造函数从公共数据库表中选择一些唯一信息,例如唯一标题文件,免责声明或页脚说明。

每个文档都是使用Win Form界面创建的。我创建了所有证书通用的基本接口,并对标头信息进行操作,并且它包含所有Document - WindowsForm 交互共有的方法。每个子文档都有自己的表单,该表单源自该父表单。在初始化时,每个表单都实例化相应的Document(子)类,并在加载时显示文档标题,免责声明和脚注。由于文档依赖于基本表单中的标题信息,因此所有方法都在基本表单中定义。这些方法接受并返回Document数据类型(父级),因为我永远不知道将调用它们的形式。每次我将新实例化的Document作为Document类(父级)传递,并且我转换返回的数据类型以匹配我需要的内容。这样我在使用通用方法收集公共信息时保留了子Documents的唯一属性。这适用于20个文件中的19个。 20是个问题。 Doc20派生自Doc19,派生自Document类。同样地,Form20派生自Form19,其源自GenericFormDoc20实际上是Doc19的重要扩展。

在表单Init上,我实例化了新的Doc20对象。我在表格加载事件中获取标题,免责声明和脚注,并根据需要显示它。

然后我尝试在GenericForm中调用一个接受并返回Document类的方法,并将返回值转换为Doc20。这很有效。

接下来,我在Form19中调用方法。该方法还接受Document类并返回Document类,其任务是从Form19Form20共有的控件中收集数据。我将Doc20对象作为Document传递。在这个方法中,我需要访问特定于Doc19的属性(因此Doc20),所以我尝试强制转换为Doc19,这就是抛出异常的地方。有趣的是,Intelisense在语法和应用程序编译方面没有任何问题。知道为什么我小时候不能扮演父母吗?

0 个答案:

没有答案
相关问题