簡體   English   中英

如何偵聽不是所有可能的類都實現的事件?

[英]How can I listen for events that are not implemented by all possible classes?

在基於MEF的應用程序中,有些模塊使用表格,而有些則不使用表格。

我希望能夠對這些表格的關閉做出回應,但似乎無法弄清楚該怎么做。 模塊類型基於接口,而使用窗體的模塊類型則繼承自Windows.Forms.Form的基類。

例如

public partial class SwatchForm : ModuleForm, IAcquisition

哪里

public partial class ModuleForm : Form

由於並非所有繼承IAcquisition (或其他模塊接口)的ModuleForm都從ModuleForm繼承, ModuleForm我嘗試了以下方法:

if (this.AcquisitionModule.GetType().IsSubclassOf(typeof(ModuleForm)))
{
    (ModuleForm)(this.AcquisitionModule).ModuleFormClosed += whatever....
}

但是它仍然抱怨IAcquisition沒有叫做ModuleFormClosed

我考慮過改用異常,但這感覺有點像hack。 有沒有辦法使用事件來做到這一點?

. 具有比強制轉換更高的優先級,因此您需要以不同的方式放置括號。 此外,您可以以更簡單的方式檢查類型。 嘗試

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

另一種方法是

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM