VB.NET中的"MyBase"和"MyClass"用法

Neh*_*rma 18 vb.net

在什么情况下会使用VB.NET中的MyBaseMyClass关键字?

Kon*_*lph 26

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
Run Code Online (Sandbox Code Playgroud)

(这与baseC#相同.)


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" '
Run Code Online (Sandbox Code Playgroud)

(这在C#中不存在.在IL中,这会发出一个call而不是通常的callvirt操作码.)


Han*_*son 6

当您需要调用虚方法并且需要指定哪一个时,都会使用它们.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