Base (Member Access)
Provides explicit access to base type members in non-static methods of a Type
Base.member
Base [ .Base ... ] .member
Base provides a way to explicitly access members of a specific base type, in the context of non-static methods of a user-defined type derived from another type using Extends.
By using Base repeatedly, as in base.base.base.member, it is possible to access any desired base type, in case there are multiple levels of inheritance.
Base is especially useful when a base type's member is shadowed by a local variable or member of a derived type using the same identifier. Base then allows unambiguous access to the base type.
For virtual methods, base.method() always calls the base method and never the overriding method.
Syntax
Base.member
Base [ .Base ... ] .member
Description
Base provides a way to explicitly access members of a specific base type, in the context of non-static methods of a user-defined type derived from another type using Extends.
By using Base repeatedly, as in base.base.base.member, it is possible to access any desired base type, in case there are multiple levels of inheritance.
Base is especially useful when a base type's member is shadowed by a local variable or member of a derived type using the same identifier. Base then allows unambiguous access to the base type.
For virtual methods, base.method() always calls the base method and never the overriding method.
Example
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()
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()
Dialect Differences
- Methods are only supported in the -lang fb dialect, hence Base has no function in other dialects.
Differences from QB
- New to FreeBASIC
See also