VB.NET之旅(六)—重载与隐藏2012-09-01 Microsoft.com 韩睿大李坐在转椅上左右晃动着,手中的一个硬币在他指间灵巧地翻滚着。 “hi, Henry。你对重写与重载的意思理解是怎么样的呢?”我正盯着他手中的硬币发愣呢,“哦,重写,就是您刚才举的示例中,在派 生类中用Overrides重新编写有Overridable标识的基类的方法或属性;重载么, 就是我们可以用同样的名称,在一个类中用不同的参数列表来创建多个方法和属 性,在调用时就可以适应不同参数类型的要求。”“在一个类 中创建?”大李的左眉向上一挑,我就知道我可能说错了。但是,好象没有 说错什么呀。“那好,你看一下,这样的写法会有什么结果?”
Public Class CBaseHenry Public Sub oldY() Console.WriteLine("基类的oldY方法") End Sub End Class Public Class CDerivedHenry Inherits CBaseHenry Public Overloads Sub oldY(ByVal j As Integer) Console.WriteLine("派生类的oldY方法") End Sub End Class Public Sub Main() Dim obj As CDerivedHenry = New CDerivedHenry()
然后大 李写了obj.oldY这时出现的智能感知菜单上出现了参数列表:

“咦,第二个oldY()无参数过程签名应该是基类定义的呀。为什 么在派生类的实例中也会出现呀!”我不由好奇起来。“没错 。还记得我上次曾显式编写构造函数的事吗?我用了一个mybase.new()用于继承 下基类的性质。现在没有写,其实是一种默认的隐式调用。”大李一说我就 明白了,其实现在的派生类应该是内含两个oldY方法了,无参数的oldY()其实就 是基类的方法,是由于Overloads和Mybase.new()双重作用的影响。“那你再看这样的变化情况。”大李象是看出我已经明白了这 个问题。他在派生类中添加了一个用Overloads标识的与基类形式一致的无参数 oldY()。
Public Class CBaseHenry Public Sub oldY() Console.WriteLine("基类的oldY方法") End Sub End Class Public Class CDerivedHenry Inherits CBaseHenry Public Overloads Sub oldY(ByVal j As Integer) Console.WriteLine("派生类的oldY方法1") End Sub Public Sub oldY() Console.WriteLine("派生类的oldY方法2") End Sub End Class Public Sub Main() Dim obj As CDerivedHenry = New CDerivedHenry() obj.oldY() End Sub
“好的,现在你再说说看,现在的obj.oldY()的运行 结果会打印出什么?”大李手按在F5运行键上问我。“应该是 派生类的,不对,基类,呃,派生类……”我一下子就晕了。“呵呵。”大李也不禁发笑起来。然后点击了一下F5键。结果 是:
派生类的oldY方法2