2010-08-13 56 views
4

我正在創建一個派生自WPF RichTextBox控件的類,我需要在複製和粘貼事件中執行一些代碼。派生類應該處理基類的事件嗎? (C#/ WPF)

我明白,只要有可能,最好的做法是在派生類中實現基於事件的代碼,方法是重寫引發事件的基類方法。然而,在這種情況下不存在這樣的方法,那麼我的派生類爲它自己的基類事件添加一個事件處理程序是可以接受的嗎?

如果我確實添加了一個事件處理程序,我認爲它應該在處理控件時明確移除。但是,我不確定在RichTextBox的情況下如何做到這一點,因爲WPF控件類似乎沒有任何檢測處置的機制。

有什麼建議嗎?

感謝, 添

回答

4

當然,你可以處理的基類的事件。例如,通常爲Loaded事件完成,因爲沒有OnLoaded方法。

您不必擔心刪除處理程序:因爲事件發佈者和訂閱者是同一個實例,所以不刪除處理程序不會阻止GC收集您的對象。

+0

非常感謝您的澄清。當它被指出時似乎很明顯。將處理程序應用於包含的對象時是否應用相同的規則 - 對於RichTextBox,我將處理其包含的DataObject實例的事件?再次感謝。 – 2010-08-13 08:17:23

+1

您只需要擔心生命週期長於訂閱者的事件發佈的事件。如果沒有對DataObject的外部引用,它將有資格進行垃圾回收,並且不會阻止收集您的控件。 – 2010-08-13 08:31:12