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
, где это возможно, добавило бы код, было бы тривиально.
Это происходит в любой конкретной версии Visual Studio? –
@roryap Ну, теперь я использую VS2013 Express, но приложение было создано в VS2010. – Ants1060