変数や、オブジェクトの型のための、追加の名前
概要
宣言
多重定義の解決
手続きポインタへのポインタ
型の転送(先送り)
不完全な型
概要
型の別名は、型のための代替名称です。
型の別名は、1つの型から別の型まで、大量の変更を容易にするか、タイピングを少なくするか、循環依存ができるようにするために、使われます。
宣言
型の別名は、
Type キーワードを使って、宣言します。それは、変数やオブジェクトを、
Extern や
Dim を使って宣言するのと、よく似ています。
The following example declares a type alias to
Single called "
float", a procedure, and defines and initializes two variables of that type:
下の例は、型
Single に "
float" 手続き、と呼ぶ別名を宣言して、その型の2つの変数を、定義して、初期化します:
Type float As Single
Declare Function add (a As float, b As float) As float
Dim foo As float = 1.23
Dim bar As float = -4.56
手続きポインター型の別名は、同じ Function で宣言されます。下の例を、参照下さい。:
Declare Function f (ByRef As String) As Integer
Type func_t As Function (ByRef As String) As Integer
Dim func As func_t = @f
Function f (ByRef arg As String) As Integer
Function = CInt
(arg)
End Function
多重定義の解決
型の別名は、多重定義の解決に使います。 - エイリアスともいいます。
どの点から見ても、型の別名は、型の別名です。
それで、手続きの多重定義解決に関する限り、型 "alias_to_T" のパラメータで定義された手続きは、型 "T" のパラメータで定義された手続きと、同じです。(多重定義しているメンバー手続きに、同様に、適用されます)。
言い換えれば、それは、型と、型の別名だけが異なるパラメタの、手続きを宣言する、誤り(重複定義)です。
下の例を参照下さい。:
Type float As Single
Declare Sub f Overload
(a As Single)
'' 下のコメントを外すと、これは、重複定義のエラーになります
'' Declare Sub f
(a As float)
手続きポインタへのポインタ
手続きポインターへのポインターは、他のポインター型とよく似ています。これが、手続きポインターを指さすことだけが異なります。
手続きが関数(ptr は、戻り型にあてはまり、手続きにあてはまらないので)のときに、
手続きポインターを宣言する構文は、直接手続きポインターへのポインターを作れないので、型別名が使われます。
以下の例は、整数のポインタを返す手続きへの、ポインタを宣言します。そして、次に、整数を返す手続きへのポインタに、ポインタを宣言します:
Dim pf As Function() As Integer Ptr
Type pf_t As Function() As Integer
Dim ppf As pf_t Ptr
型の転送(先送り)
型の別名は、前方へ参照をつけることができます。
別名は、まだ詳細に定められていない他の型を指すことができます。
Type foo As bar
Type sometype
f As foo Ptr
End Type
Type bar
st As sometype
a As Integer
End Type
別名と、型の転送参照を使うと、型の間で循環依存ができます。
Type list As list_
Type listnode
parent As list Ptr
text As String
End Type
Type list_
first As listnode Ptr
count As Integer
End Type
不完全な型
型は、そのサイズ、すなわち、メモリでそれが占領する必要があるバイト数が知られて、その項目のすべてのオフセットが知られるまで、不完全であると考えられます。
不完全な型のために、スペースを割り当てることはできません。
不完全な型のデータ型を持つ変数を宣言すること、パラメタとして不完全な型をわたすこと、また、不完全な型のメンバーにアクセスすることは、できません。
しかし、ポインターのサイズは知られているので、不完全な型へのポインタは、割り当てられ、他の型のメンバーとして宣言され、手続きにパラメータとして渡されることができます。
Type sometype As sometype_
'' sometype のサイズが未知であるので、許容されません
'' TYPE incomplete
'' a AS sometype
'' END TYPE
'' ポインタのサイズが知られているので、許容されます
Type complete
a As sometype Ptr
End Type
Dim x As complete
'' sometype のサイズがまだ未知なので、許容されません
'' DIM size_sometype AS INTEGER = SIZEOF
( sometype )
'' 型を完成させます
Type sometype_
value As Integer
End Type
'' 型が、今完成するので、許容されます
Dim size_sometype As Integer = SizeOf
( sometype )
Type completed
a As sometype
End Type
Dim size_completed As Integer = SizeOf
( completed )