重载、重写与隐藏
Overloads, Overrides And Shadows
恳请高人指教.
Nobi
2007-6-15
这是继承(Inherits)中的三个重要概念。
相同方法或属性的不同实现,根据参数数量、类型的不同有多个版本的实现方式
用法
定义方法或属性时使用Overloads关键字,程序将根据参数的数量、类型和顺序选择正确的版本实现。
示例
Public Class TheClass
Sub ToOverload(ByVal value As Integer)
MsgBox("I got an integer:" & CStr(value))
End Sub
'重载
Sub Overloads ToOverload(ByVal value As String)
MsgBox("I got a string:" & value)
End Sub
End Class
使用
Sub Main()
Dim myClass As TheClass
myClass.ToOverload(9527)
myClass.ToOverload("Hello Nobi!")
End Sub
运行结果
第一个对话框显示: I got an integer:9527
第二个对话框显示: I got a string:Hello Nobi!
例外
在同一个类中重载时可以省略Overloads关键字。
与重载不同,重写方法的参数数量、类型都完全相同,直接代替其所继承的方法或属性。
用法
用于派生类。在基类的方法或属性定义时使用下列修饰符控制怎样重写:
Overridable 允许重写。
NotOverridable 禁止重写。
MustOverride 必须重写。如果使用了MustOverride,则基类必须是MustInherit的抽象类。
Overrides 重写方法、属性。在派生类中实现
示例
'基类
Public Class TheBase
Public Overridable Sub Talk()
MsgBox("What's up?")
End Sub
End Class
'派生类
Class TheDerived : Inherits TheBase
Public Overrides Sub Talk()
MsgBox("I'm not the base.")
End Sub
End Class
使用
Sub Main()
Dim myClass As TheDerived
myClass.Talk()
End Sub
运行结果
对话框显示: I'm not the base.
创建大范围成员的局部版本,也可以用其他类型来隐藏一种类型,可以声明相同名称的属性,以隐藏继承的方法。
当派生类中某方法或属性的名称和范围与基类中的方法或属性冲突时,需要使用Shadows关键字。
此时将使用生存周期最短的那一个(即更加“局部”)。
用法
用于派生类。
示例
基类与派生类均定义了Value成员,名称冲突,因此需要在派生类中使用Shadows关键字声明。
'基类
Class TheBase
Public Value As Double = 3.14
End Class
'派生类
Class TheDerived : Inherits TheBase
Public Shadows ReadOnly Property Value() As Double
Get
Return 9527
End Get
End Property
End Class
使用
当使用TheDerived类对象的Value成员时,将选取最“局部”的Value属性,而不是基类的Value变量。
Sub Main()
Dim myClass As TheDerived
MsgBox(myClass.Value)
End Sub
运行结果
对话框显示: 9527