[英]Is redirection of events a good practice in C#? If true, who should be the 'sender'?
現在,我正在重構其他人編寫的代碼,並且發現了一種對我的感受充滿困惑的構造。 有一個類似ListView的控件 ,它的每個項目都可以引發“ DialogOpened”事件。 但是,將外部事件處理程序注冊到每個項目可能很麻煩(並且可以動態添加或刪除這些項目!)。 因此,類似ListView的控件中只有一個事件,並將其命名為“ ItemDialogOpened”。 這對我來說聽起來很合理,但是有兩個問題:
對於2 -這是一個有點不同的解釋。 通常,您希望sender
是您訂閱的東西; 其他任何信息都應通過args
傳遞-但也有例外,例如(例如)單個商品作為sender
通過。
重要的是要清楚地記錄下來。
對於1:此方法不能完全適合標准流型。 從我的角度來看,您必須在私有方法中隱藏自己的實現邏輯(此方法將成為每個項DialogOpened事件的終點 ),然后此方法將調用受保護的虛擬方法OnItemDialogOpened 。 在這種情況下,listview可以被繼承,通信邏輯將是透明的,並且更像ms,並且訂閱者將無需強制轉換即可工作(因為強制轉換隱藏在您的私有方法中)。 像這樣:
private void DialogOpenedHandler(object sender, EventArgs e)
{
OnItemDialogOpened(new ItemEventArgs((YourItemClass)sender);
}
protected virtual OnItemDialogOpened(ItemEventArgs e)
{
// call event here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.