Skip to content

BASE(成员访问)


Type 的非静态方法中提供对基类成员的显式访问

语法

base.member
base [ .base ... ] .member

说明

Base 提供了一种在用户自定义类型(使用 Extends 从另一类型派生)的非静态方法上下文中,显式访问特定基类成员的方式。

通过重复使用 Base(如 base.base.base.member),可以在多层继承的情况下访问任意所需的基类。

Base 在基类成员被派生类型的局部变量或同名成员遮蔽时尤为有用。Base 允许无歧义地访问基类。

对于虚拟方法,base.method() 始终调用基类方法,而不是重写方法。

注意:没有使用 Base 访问特定基类成员运算符的特定语法。唯一的方法是预先将实例向上转型为正确的类型,然后对其应用运算符(但对于虚拟运算符,此变通方法无法在重写时调用基类运算符,因为这不会修改实例的运行时类型,只会修改其编译时类型)。

示例

start GeSHi

vb
Type Parent
    As Integer a
    Declare Constructor(ByVal As Integer = 0)
    Declare Sub show()
End Type

Constructor Parent(ByVal a As Integer = 0)
    This.a = a
End Constructor

Sub Parent.show()
    Print "parent", a
End Sub

Type Child extends Parent
    As Integer a
    Declare Constructor(ByVal As Integer = 0)
    Declare Sub show()
End Type

Constructor Child(ByVal a As Integer = 0)
    '' Call base type's constructor
    Base(a * 3)
    This.a = a
End Constructor

Sub Child.show()
    '' Call base type's show() method, not ours
    Base.show()
   
    '' Show both a fields, the base type's and ours'
    Print "child", Base.a, a
End Sub

Type GrandChild extends Child
    As Integer a
    Declare Constructor(ByVal As Integer = 0)
    Declare Sub show()
End Type

Constructor GrandChild(ByVal a As Integer = 0)
    '' Call base type's constructor
    Base(a * 2)
    This.a = a
End Constructor

Sub GrandChild.show()
    '' Call base type's show() method, not ours
    Base.show()
   
    '' Show both a fields, the base.base type's, the base type's and ours'
    Print "grandchild", Base.Base.a, Base.a, a
End Sub

Dim As GrandChild x = GrandChild(3)
x.show()

end GeSHi

方言差异

  • 方法仅在 -lang fb 方言中受支持,因此 Base 在其他方言中没有功能。

与 QB 的差异

  • FreeBASIC 新增特性

另请参阅

  • Base(初始化器)
  • This
  • Type
  • Extends
  • Extends Zstring
  • Extends Wstring
  • Option Base

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系