VB.NET 重载、重写与隐藏

来源:互联网 发布:淘宝店铺名片怎么改 编辑:程序博客网 时间:2024/04/30 19:46

重载、重写与隐藏是继承(Inherits)中的三个重要概念。

 

一、重载

 

相同方法或属性的不同实现,根据参数数量、类型的不同有多个版本的实现方式。

 

用法

 

定义方法或属性时使用Overloads关键字,程序将根据参数的数量、类型和顺序选择正确的版本实现。

 

示例

    Public ClassTheClass

        PublicOverloads SubToOverload(ByVal value AsInteger)

            MsgBox("I got an integer:" & CStr(value))

        EndSub

        '重载

        PublicOverloads SubToOverload(ByVal value AsString)

            MsgBox("I got a string:" & value)

        EndSub

    End Class

使用

    Sub Main()

        DimMyClass As TheClass

        MyClass.ToOverload(9527)

        MyClass.ToOverload("Hello Nobi!")

   End Sub

运行结果

 

第一个对话框显示: I got an integer9527

第二个对话框显示: I got a stringHello Nobi!

 

例外

 

在同一个类中重载时可以省略Overloads关键字。

 

二、重写

 

与重载不同,重写方法的参数数量、类型都完全相同,直接代替其所继承的方法或属性。

 

用法

用于派生类。

基类的方法或属性定义时使用下列修饰符控制重写:

 

关键字

功能

Overridable

允许重写

NotOverridable

禁止重写

MustOverride

必须重写

Overrides

重写方法、属性,在派生类中实现

注:如果使用了MustOverride,则基类必须是MustInherit的抽象类。

 

示例

    '基类

    Public Class TheBase

        PublicOverridable SubTalk()

            MsgBox("What's up?")

        EndSub

    End Class

    '派生类

    Public Class TheDerived

        InheritsTheBase

        PublicOverrides SubTalk()

            MsgBox("I'm not the base.")

        EndSub

   End Class

 

使用

    Sub Main()

        DimTestClass As TheDerived

        TestClass.Talk()

   End Sub

 

运行结果

 

对话框显示: I'm not the base.

 

三、隐藏

 

创建大范围成员的局部版本,也可以用其他类型来隐藏一种类型,可以声明相同名称的属性,以隐藏继承的方法。

当派生类中某方法或属性的名称和范围与基类中的方法或属性冲突时,需要使用Shadows关键字。

此时将使用生存周期最短的那一个(即更加局部)。

 

用法

 

用于派生类。

 

示例

基类与派生类均定义了Value成员,名称冲突,因此需要在派生类中使用Shadows关键字声明。

    '基类

    Class TheBase

        PublicValue As Double= 3.14

    End Class

    '派生类

    Class TheDerived : Inherits TheBase

        PublicShadows ReadOnlyProperty Value() AsDouble

            Get

               Return 9527

            End Get

        EndProperty

   End Class

 

使用

当使用TheDerived类对象的Value成员时,将选取最局部Value属性,而不是基类的Value变量。

    Sub Main()

        DimTestClass As TheDerived

        MsgBox(TestClass.Value)

   End Sub

 

运行结果

 

对话框显示: 9527

 

 

原创粉丝点击