如何监听所有可能的类未实现的事件?

时间:2012-10-11 17:57:28

标签: c# events inheritance

在我的基于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

我考虑过使用异常,但这感觉有点像黑客。有没有办法使用事件来做到这一点?

1 个答案:

答案 0 :(得分:3)

.的优先级高于强制转换,因此您需要以不同的方式放置括号。此外,您可以更简单的方式检查类型。尝试

if (this.AcquisitionModule is ModuleForm) {
    ((ModuleForm) this.AcquisitionModule).ModuleFormClosed += ...
}

另一种方式是

var moduleForm = this.AcquisitionModule as ModuleForm;
if (moduleForm != null) {
    moduleForm.ModuleFormClosed += ...
}