我注意到我正在处理的应用程序中的表单事件处理程序有不同的对象引用:其中一些是Me.<event>
,其中一些是MyBase.<event>
。经过一段时间的游戏,我发现从设计器中的属性窗口创建的事件被赋予了MyBase
引用,而通过在代码窗口中选择它们而创建的事件被赋予了Me
引用。
我read up关于这两个参考文献之间的差异,但这并没有真正阐明为什么在这些情况下可以使用一个而不是另一个。那么,我应该关注具有不同引用的表单事件处理程序吗?如果是这样,我应该使用哪一个?
答案 0 :(得分:3)
Me
和MyBase
确实有不同的含义,但当您谈论事件处理程序时,它们可以互换使用。
MyBase
。当您的派生类Overrides
来自您的基类的某个成员,但是您希望专门调用该成员的基类实现而不是您自己的成员时,这非常有用。例如:
Public Class MyBaseClass
Public Overridable Sub DoWork()
Console.WriteLine("Base")
End Sub
End Class
Public Class MyDerivedClass
Inherits MyBaseClass
Public Overrides Sub DoWork()
Console.WriteLine("Derived")
End Sub
Public Sub Test()
Me.DoWork()
MyBase.DoWork()
End Sub
End Class
调用MyDerivedClass.Test
方法时,上面的示例将输出以下内容:
Derived
Base
很明显,Me
和MyBase
意味着两件不同的事情。但是,当涉及到事件时,在VB.NET中,没有办法让派生类覆盖由其基类定义的事件。实际上,派生类也无法对事件进行阴影处理。如果基类定义了一个事件,那么从它派生的所有类必须具有与基类中定义的完全相同的事件。
由于是这种情况,当您在派生类中定义事件处理程序时,无论您是说Handles Me.MyEvent
还是Handles MyBase.MyEvent
都无关紧要。两个类中的事件必须相同,因此区别是没有意义的。我想你可以说使用MyBase
更具有特定的,但我认为大多数人会同意,在可能的情况下,总是使用MyBase
的清晰度会增加代码将是微不足道的。