实例021类的继承

Inherits Statement

导致当前类或接口继承其他类或接口集的属性、变量、属性、过程和事件。

MustInherit 

指定类只能用作基类,并且不能直接从其创建对象。

NotInheritable

指定类不能用作基类。

继承的基础知识 (Visual Basic)

Inherits语句用于根据称为基类的新类(称为派生类)声明新类。 派生类继承并可以扩展基类中定义的属性、方法、事件、字段和常量。 以下部分介绍继承的一些规则,以及可用于更改类继承或继承方式的修改器:

 

 

 

继承修改器

Visual Basic 引入了以下类级语句和修改器来支持继承:

  • Inherits语句 = 指定基类。

  • NotInheritable修改器 = 防止程序员将类用作基类。

  • MustInherit修改器 = 指定类仅用于基类。 不能直接创建MustInherit类的实例;因此,无法直接创建类的实例。它们只能创建为派生类的基类实例。 (其他编程语言(如C++和 C#)使用术语抽象类来描述此类

派生类中的重写属性和方法

默认情况下,派生类继承其基类的属性和方法。 如果继承的属性或方法在派生类中的行为不同,则可以重写它。 也就是说,您可以在派生类中定义方法的新实现。 下列修饰符用于控制如何重写属性和方法:

  • Overridable• 允许在派生类中重写类中的属性或方法。

  • Overrides• 重写基Overridable类中定义的属性或方法。

  • NotOverridable• 防止在继承类中重写属性或方法。 默认情况下,Public方法为NotOverridable

  • MustOverride• 要求派生类重写属性或方法。 使用MustOverride关键字时,方法定义仅包含Sub。 Function。 Property 不允许任何其他语句,特别是没有End SubEnd Function语句。 MustOverride方法必须在类中MustInherit声明。

MyBase 关键字

关键字MyBase的作用类似于引用类当前实例的基类的对象变量。 MyBase通常用于访问派生类中重写或隐藏基类成员。 特别是,MyBase.New用于从派生类构造函数显式调用基类构造函数。

下面的列表描述了对 使用MyBase的限制:

  • MyBase指直接基类及其继承成员。 它不能用于访问Private类中的成员。

  • MyBase是关键字,而不是真实对象。 MyBase不能分配给变量、传递给过程或用于Is比较。

  • MyBase限定的方法不必在直接基类中定义;它可以在间接继承的基类中定义。 为了使 引用MyBase具有正确的编译,某些基类必须包含一个方法,匹配调用中显示的参数的名称和类型。

  • 不能使用MyBase调用MustOverride基类方法。

  • MyBase不能用来限定自己。 因此,以下代码无效:

    MyBase.MyBase.BtnOK_Click()

  • MyBase不能在模块中使用。

  • MyBase不能用于访问标记为Friend基类的基类成员,因为基类位于其他程序集中。

有关详细信息和另一个示例,请参阅如何:访问派生类隐藏的变量

MyClass 关键字

关键字MyClass的作用类似于对象变量,该变量引用最初实现的类的当前实例。 MyClass类似于Me,但每个方法和属性调用MyClass都被视为方法或属性不是可重写的。 因此,方法或属性不受派生类中重写的影响。

  • MyClass是关键字,而不是真实对象。 MyClass不能分配给变量、传递给过程或用于Is比较。

  • MyClass引用包含类及其继承成员。

  • MyClass可用作成员的Shared限定符。

  • MyClass不能在Shared方法内使用,但可以在实例方法内访问类的共享成员。

  • MyClass不能在标准模块中使用。

  • MyClass可用于限定在基类中定义且没有该类中提供的方法的实现的方法。 这种引用与MyBase.方法的含义相同。

一个小例子:

Module Module1
    Public Class 人员
        Private pName As String
        Public Property Name As String
            Get
                Return pName
            End Get
            Set(ByVal value As String)
                pName = value
            End Set
        End Property

        Public Sub Work()
            Dim iCount As Integer
            For iCount = 1 To 10
                Console.WriteLine(pName & "Working" & CStr(iCount))
            Next

        End Sub
    End Class
    Public MustInherit Class 售货员
        Inherits 人员
        Public Corporation As String
        Public City As String
    End Class

    Public Class 百货售货员
        Inherits 售货员
        Public Sub Speak()
            Console.WriteLine("汪汪" & Name)
        End Sub
    End Class


    Sub Main()
        Dim Person As New 人员
        Person.Name = "张三"
        Person.Work()

        Dim SalesMan As New 百货售货员
        SalesMan.Name = "李四"
        SalesMan.City = "西雅图"
        Console.WriteLine(SalesMan.Name)
        Console.WriteLine(SalesMan.City)
        SalesMan.Work()
        SalesMan.Speak()

        Console.Read()
    End Sub

End Module
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ngbshzhn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值