[英]event handling inheritance (C++)
我正在重新設計如何為現有代碼(在 C++ 中)處理事件(與數據相關)。 要處理的事件是DataTable
相關事件和XmlNode
相關事件。
我想創建一個具有虛擬功能(稱為EventManager
)的通用超級 class ,以便在整個應用程序中提供一致性。
我計划在EventManager
中有以下虛擬功能:
DataChanged(EventArgs arg)
DataChanging(EventArgs arg)
DataInserted(EventArgs arg)
DataInserting(EventArgs arg)
DataRemoved(EventArgs arg)
DataRemoving(EventArgs arg)
我使用EventArgs
作為參數,因為其他參數( XmlNodeChangeEventArgs, DataRowChangeEventArgs, DataColumnChangeEventArgs
)都是從它派生的。 但是通過在虛擬函數中使用它,我將丟失派生事件參數獨有的信息。
我的問題,我應該如何設計/處理這個超級 class 和虛擬功能,以便擁有一個管理事件的通用 class ,但仍然可以正確地 map (以及所需的所有派生信息)?
我已盡力解釋我的情況,但請隨時提出問題以澄清問題。 我真的在尋找深思熟慮的答案,所以我願意改進我的問題!
提前感謝您的時間和耐心::)
通過reference
傳遞 arguments ,通過值傳遞只會增加額外的開銷。
但是通過在虛擬函數中使用它,我將丟失派生事件參數獨有的信息。
您可以使用dynamic_cast
並檢查向下轉換的有效性,不會丟失任何信息。
除了通過引用而不是按值傳遞所有事件(這會將它們切片,因此您甚至無法將它們丟棄),我會考慮定義一些更抽象的方式來查看您的事件,以便將引用傳遞給基礎 class 不會妨礙您訪問派生類中定義的所有功能。
我不知道這是否可能,但是您可以使 EventArgs class 成為虛擬基礎 class 公開一個足夠通用的接口,以承載您在派生類中可能需要的所有內容。
如果您指定有關您為活動設想的操作和行為的更多信息,我可以嘗試提供更詳細的建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.