我不能将父类转换为孩子 - 不断收到 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
哪个派生自GenericForm
。Doc20
实际上是 的重要扩展Doc19
。
在表单上Init
我实例化新Doc20
对象。我获取表单加载事件的标题、免责声明和脚注,并根据需要显示。
然后我尝试调用一个GenericForm
接受并返回 Document 类的方法,并将返回值转换为Doc20
. 这样可行。
接下来我调用方法Form19
。该方法还接受Document
类并返回Document
类,并负责从Form19
和的通用控件中收集数据Form20
。我将我的Doc20
对象作为文档传递。在此方法中,我需要访问特定于Doc19
(因此Doc20
)的属性,因此我尝试强制转换为 as Doc19
,这就是引发异常的地方。有趣的是,Intelisense 在语法和应用程序编译方面没有问题。知道为什么我不能把父母当作孩子吗?