我有一个基类,一个继承自基类的中间类和一个继承自中间类的顶级类。我在基类中定义了一个事件并从一个方法中提取它。我在中间类中为基类事件定义了一个处理程序,并且在顶级类中也定义了相同的处理程序。 当事件触发时,中间类处理程序首先被击中,然后是顶级处理程序。固定的继承层次结构中的事件处理程序序列是否已修复?
如果我不断向链中添加更多类(超级继承顶级,超级继承等等),事件处理程序会不断在最基本的类中调用(例如,中,顶,超,至尊)。
这个序列总是成立吗? 如果不是,那么它会以不同的顺序排列?
我正在观察的顺序非常适合这个功能;我只是想确保它会一直工作。
我理解事件并不保证以任何顺序触发,但这是框架在编译时知道的事情,作为代码的作者,我可以说在运行时不会添加/删除委托这个事件,事件也不会在基地之外消耗,而且是子类连锁;事实上,它是受保护的。
我不知道幕后发生了什么,但它可能会在编译期间设置序列,因此在运行时它已经完成了处理?
编辑:我添加了样本,以澄清我在做什么。
Public Class BaseClass
Protected Event Hello(ByRef Cancel As Boolean)
Public Sub SayHello()
Dim Cancel As Boolean
RaiseEvent Hello(Cancel)
End Sub
End Class
Public Class MiddleClass
Inherits BaseClass
Private Sub MiddleClass_Hello(ByRef Cancel As Boolean) Handles Me.Hello
'This appears to always get called first
End Sub
End Class
Public Class TopClass
Inherits MiddleClass
Private Sub TopClass_Hello(ByRef Cancel As Boolean) Handles Me.Hello
'This appears to always get called second
End Sub
End Class
Public Class UltraClass
Inherits TopClass
Private Sub UltraClass_Hello(ByRef Cancel As Boolean) Handles Me.Hello
'This appears to always get called third
End Sub
End Class
'...and so on
如果您自己重新举办活动,并且没有任何代码可能会混淆再次提升它的方法,那么订单就不会受到干扰。当然,你应该使这种方法是私人的而不是保护,以获得硬性保证。 – 2012-08-07 17:15:19
@Hans我添加了我的代码,所以你可以看到一切的范围。 – toddmo 2012-08-07 17:25:30