派生类应该处理基类的事件吗? (C#/ WPF)

问题描述:

我正在创建一个派生自WPF RichTextBox控件的类,我需要在复制和粘贴事件中执行一些代码。派生类应该处理基类的事件吗? (C#/ WPF)

我明白,只要有可能,最好的做法是在派生类中实现基于事件的代码,方法是重写引发事件的基类方法。然而,在这种情况下不存在这样的方法,那么我的派生类为它自己的基类事件添加一个事件处理程序是可以接受的吗?

如果我确实添加了一个事件处理程序,我认为它应该在处理控件时明确移除。但是,我不确定在RichTextBox的情况下如何做到这一点,因为WPF控件类似乎没有任何检测处置的机制。

有什么建议吗?

感谢, 添

当然,你可以处理的基类的事件。例如,通常为Loaded事件完成,因为没有OnLoaded方法。

您不必担心删除处理程序:因为事件发布者和订阅者是同一个实例,所以不删除处理程序不会阻止GC收集您的对象。

+0

非常感谢您的澄清。当它被指出时似乎很明显。将处理程序应用于包含的对象时是否应用相同的规则 - 对于RichTextBox,我将处理其包含的DataObject实例的事件?再次感谢。 – 2010-08-13 08:17:23

+1

您只需要担心生命周期长于订阅者的事件发布的事件。如果没有对DataObject的外部引用,它将有资格进行垃圾回收,并且不会阻止收集您的控件。 – 2010-08-13 08:31:12