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操作码.)
当您需要调用虚方法并且需要指定哪一个时,都会使用它们.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
| 归档时间: |
|
| 查看次数: |
21690 次 |
| 最近记录: |