FreeBASIC BASE (メンバ アクセス)
目次→言語リファレンス→変数とデータ型→ユーザ定義型→Base←オリジナル・サイト
明示的に Type の非静的メソッドで、基本型メンバにアクセスできるようにします。
構文:
base.member
base [ .base ... ] .member
記述:
Base は、明示的に、特定のベース型のメンバーにアクセスできるようにします。
Extends を使っている別の型に由来するユーザー定義型の、非静的メソッドの文脈を使います。
Base を、
base.base.base.member のように繰り返し使用することによって、複数レベルの継承でも、希望の基底型にアクセスできます。
Base は、ベース型のメンバーが、同じ識別子を使っている派生型の、局所変数またはメンバーによって陰になるとき、特に役に立ちます。
そして、
Base は、ベース型への一義的なアクセスを許可します。
仮想メソッドについては、base.method()は、常にベース・メソッドと、決して上書きされないメソッドを呼びます。
注: Base には、特定のベース型のメンバー演算子に、アクセスするための、特定の構文はありません。
唯一の方法は、事前に適切な型にアップキャストされたインスタンスに、演算子を適用することです。
(ただし、仮想演算子の場合、この回避策は、上書き時にベース演算子を呼び出すことを許可しません。これは、インスタンスの実行時型を変更せず、コンパイル時型だけを変更するためです)。
例:
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)
'' base 型の構築子を呼ぶ
Base(a * 3)
This.a = a
End Constructor
Sub Child.show()
'' base 型の show() メソッド (我々のものでない) を呼ぶ
Base.show()
'' base 型と我々のものの、両方の項目を表示する'
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)
'' base 型の構築子を呼ぶ
Base(a * 2)
This.a = a
End Constructor
Sub GrandChild.show()
'' 我々のものではない base 型の show() メソッドを呼ぶ
Base.show()
'' 両方の項目を表示する, base.base 型, base 型, 我々の型'
Print "grandchild", Base.Base.a, Base.a, a
End Sub
Dim As GrandChild x = GrandChild(3)
x.show()
Sleep
方言差:
-
メソッドは -lang
fb 方言だけでサポートされます。このため、Base は他の方言で機能しません。
QBからの違い:
参照:
ページ歴史:2019-12-16 10:07:00
日本語翻訳:WATANABE Makoto、原文著作者:CountingPine