“MyBase” и использование “MyClass” в VB.NET

Вы можете прослушивать события на уровне документа.

[...events].forEach(e => {
  document.addEventListener(e, (ev) => {
    ev.preventDefault()
    ... 
  })
}) 

Но определенно есть запах кода ... Я сомневаюсь, что перехват всех событий - это хорошая идея. Когда-либо.

18
задан Peter Mortensen 3 February 2012 в 13:37
поделиться

5 ответов

Оба термина использованы под контекстом Родительского Ребенка (или Наследованы от основы), отношение между двумя классами.

MyBase назван от дочернего класса. Вы используете это, когда Вы хотите к , относятся к члену родительского класса без неоднозначности . Это полезно, когда дочерний класс имеет участника, для которого имя также используется в родительском классе (обратите внимание, что это означает дочерний элемент или overloads или shadows родительский элемент).

MyClass назван от родительского класса. Вы используете это, когда Вы хотите обратиться к члену того же самого родительского класса, и игнорируют, мог ли родительский элемент быть переопределен дочерним элементом . Это возможно полезно, когда Вы определяете поведение по умолчанию путем меток участника как Overridable, но все еще хотите использовать то поведение по умолчанию для механизмов в родительском классе.

0
ответ дан 30 November 2019 в 07:28
поделиться

MyBase используется, когда виртуальной функции необходимо вызвать версию своего родителя. Например, рассмотрим:

Class Button
    Public Overridable Sub Paint()
        ' Paint button here. '
    End Sub
End Class

Class ButtonWithFancyBanner
    Inherits Button

    Public Overrides Sub Paint()
        ' First, paint the button. '
        MyBase.Paint()
        ' Now, paint the banner. … '
    End Sub
End Class

(Это то же самое, что base в C #.)


MyClass вообще редко используется. Он вызывает метод собственного класса, даже если он обычно вызывает виртуальный метод производного класса . Другими словами, он отменяет диспетчеризацию виртуального метода и вместо этого выполняет статический вызов.

Это надуманный пример. Мне сейчас трудно найти реальное применение (хотя оно определенно существует):

Class Base
    Public Overridable Sub PrintName()
        Console.WriteLine("I’m Base")
    End Sub

    Public Sub ReallyPrintMyName()
        MyClass.PrintName()
    End Sub
End Class

Class Derived
    Inherits Base
    Public Overrides Sub PrintName()
        Console.WriteLine("I’m Derived")
    End Sub
End Class

' … Usage: '

Dim b As Base = New Derived()
b.PrintName()         ' Prints "I’m Derived" '
b.ReallyPrintMyName() ' Prints "I’m Base" '

(В C # этого нет. В IL это вызывает вызов вместо обычного callvirt код операции.)

26
ответ дан 30 November 2019 в 07:28
поделиться

mybase ссылается на непосредственный базовый класс текущего экземпляра.

myclass ссылается на текущий экземпляр, но игнорирует любую переопределенную реализацию свойств/методов класса.

В двух словах, общее использование обоих методов - это полиморфизм. Вот хорошая статья, которая объясняет ключевые слова немного подробнее.

3
ответ дан 30 November 2019 в 07:28
поделиться

Оба используются, когда вам нужно вызвать виртуальный метод, и вам нужно указать, какой именно. MyBase вызовет метод в базовом классе, MyClass вызовет метод в текущем классе.

Не думаю, что я использовал MyClass больше одного или двух раз, но MyBase я использовал довольно часто, когда переопределял метод, но хотел, чтобы код переопределенного метода также выполнялся.

MyBase:

http://msdn.microsoft.com/en-us/library/dzfhkk01%28VS.71%29.aspx

MyClass:

http://msdn.microsoft.com/en-us/library/b3b35kyk%28VS.71%29.aspx

6
ответ дан 30 November 2019 в 07:28
поделиться

Эти ключевые слова используются в сценариях, связанных с наследованием. MyBase, MyClass часто используются для обозначения некоторых функций или свойств в родительском классе. Если у вас есть класс, производный от другого, эти ключевые слова используются для ссылки на код в контексте родительского класса.

0
ответ дан 30 November 2019 в 07:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: