Base (Member Access)

FreeBASIC

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.

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