我无法将父类强制转换为子级 - 不断获得无效的强制转换异常。
我无法克服这个问题,我会集体帮助。
我正在开发一个创建某些文档的应用程序。共有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
,其源自GenericForm
。 Doc20
实际上是Doc19
的重要扩展。
在表单Init
上,我实例化了新的Doc20
对象。我在表格加载事件中获取标题,免责声明和脚注,并根据需要显示它。
然后我尝试在GenericForm
中调用一个接受并返回Document类的方法,并将返回值转换为Doc20
。这很有效。
接下来,我在Form19
中调用方法。该方法还接受Document
类并返回Document
类,其任务是从Form19
和Form20
共有的控件中收集数据。我将Doc20
对象作为Document传递。在这个方法中,我需要访问特定于Doc19
的属性(因此Doc20
),所以我尝试强制转换为Doc19
,这就是抛出异常的地方。有趣的是,Intelisense在语法和应用程序编译方面没有任何问题。知道为什么我小时候不能扮演父母吗?