Base (Member Access)
Provides explicit access to base type members in non-static methods of a `Type`
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.
Note: There is no specific syntax with `Base` to access a member operator of a specific base type. The only way is to apply the operator on the instance beforehand up-casted to the right type (but for virtual operators, this workaround does not allow to call the base operator when overridden, because that does not modify the run-time type of the instance but only its compile-time type).
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()
`
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

- `Base (Initializer)`
- `This`
- `Type`
- `Extends`
- `Extends Zstring`
- `Extends Wstring`
- `Option Base`