0

我不能将父类转换为孩子 - 不断收到 Invalid Cast Exception。

我无法克服这个问题,我会集会使用一些帮助。

我正在开发一个创建某些文档的应用程序。共有 20 份文件。其中 19 个是独一无二的,一个是通过扩展内容从不同的一个衍生而来的。所有证书都有共同的标题信息和特定于文档的正文。

所以我创建了Document类。我从不直接实例化Document类,只通过它的孩子。19个文档直接派生自Document类。Document类定义所有文档共有的所有字段和属性以及访问 SQL 数据库的方法。每个Document(子)的构造函数,当初始化为无参数调用Document的(父)构造函数时,传递一个整数,帮助该构造函数从公共数据库表中选择一些唯一信息,例如文档的唯一标题、免责声明或页脚注释。

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

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

然后我尝试调用一个GenericForm接受并返回 Document 类的方法,并将返回值转换为Doc20. 这样可行。

接下来我调用方法Form19。该方法还接受Document类并返回Document类,并负责从Form19和的通用控件中收集数据Form20。我将我的Doc20对象作为文档传递。在此方法中,我需要访问特定于Doc19(因此Doc20)的属性,因此我尝试强制转换为 as Doc19,这就是引发异常的地方。有趣的是,Intelisense 在语法和应用程序编译方面没有问题。知道为什么我不能把父母当作孩子吗?

4

0 回答 0