在我的基于MEF的应用程序中,有些模块使用表单,但有些模块没有。
我希望能够回应这些表格的封闭,但似乎无法弄清楚如何这样做。模块类型基于接口,使用表单的模块类型继承继承自Windows.Forms.Form
的基类。
E.g。
public partial class SwatchForm : ModuleForm, IAcquisition
其中
public partial class ModuleForm : Form
由于并非所有继承IAcquisition
(或我的其他模块接口)的东西都继承自ModuleForm
,我试过这个:
if (this.AcquisitionModule.GetType().IsSubclassOf(typeof(ModuleForm)))
{
(ModuleForm)(this.AcquisitionModule).ModuleFormClosed += whatever....
}
但它仍然抱怨IAcquisition
没有任何名为ModuleFormClosed
。
我考虑过使用异常,但这感觉有点像黑客。有没有办法使用事件来做到这一点?
答案 0 :(得分:3)
.
的优先级高于强制转换,因此您需要以不同的方式放置括号。此外,您可以更简单的方式检查类型。尝试
if (this.AcquisitionModule is ModuleForm) {
((ModuleForm) this.AcquisitionModule).ModuleFormClosed += ...
}
另一种方式是
var moduleForm = this.AcquisitionModule as ModuleForm;
if (moduleForm != null) {
moduleForm.ModuleFormClosed += ...
}