[英]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.