BASE(成员访问)
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgBase
- 最后更新: 2019-12-16
在 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(初始化器)ThisTypeExtendsExtends ZstringExtends WstringOption Base
返回 目录