前回に引き続き、名前空間の話題でいきます。
前のサンプルプログラムでは簡単ですが、名前空間の定義法と使用法をお見せしましたが、
今回はもう少し、詳しい仕様を紹介しておきます。
基本的に名前空間内Namespace ~ End Namesapce間には
Const
Const Enum
Class
Dim
Enum
Function
Interface
Sub
Type
TypeDef
だけです。これがどういった区分になっているか分かりにくいように思われますが、
これは実に簡単なことで、名前空間内ではフローに関わるようなプログラムを書くことはできません。
要するにIf文やFor文などをはじめとするステートメントを名前空間内へ直接記述することはできません。
これは名前空間があくまでも名前の衝突を防ぐために使われるものだからです。
つづいて、名前空間の定義時の注意点をまとめてますと、
- 名前空間の名前は半角数字で、先頭の文字は英字のみで大文字と小文字は区別される
- 同じ名前の名前空間が作成されると結合される
- 名前空間は異なる名前空間で入れ子構造にすることができる
下記に簡単な名前空間のサンプルプログラムを紹介しておきます。
コンパイルの設定はいつもの通り、DOSプロンプトです。
それと、DOSのサンプルの場合は先頭に#consoleをつけることにしました。
#console '結合 Namespace Name1 Const A = 10 Dim B As Long End Namespace Namespace Name1 Sub C() Print A*B End Sub End Namespace '入れ子 Namespace name1 Namespace name2 Sub D() Print 100 End Sub End Namespace End Namespace Name1.B = 5 Name1.C() name1.name2.D() Sleep(-1)
これで、名前空間のだいたいの使い方は分かっていただけるたと思いますが、
最後にImportsステートメントに触れておきたいと思います。
と、いうよりもこのImportsを説明したかったがためにここまで長ったらしい説明をしてきましたw
名前空間を定義して使用する場合、名前空間内の関数や変数にアクセスするためには、
サンプルを見ても分かる通り、名前空間名に「.」ピリオドをつけてなければいけませんが、
名前空間内の関数や変数に直接アクセスしたい場合に、このImportsを使います。
下にそのサンプルをのせます。
#console Namespace Name2 Dim A As Long End Namespace Imports Name2 A = 108 Print A Sleep(-1)
こっちもそれほど難しくはないとおもいますが、
たとえば、Importsで取り込みたい2つの名前空間で同じ名前の変数や関数が使われている場合は
コンパイルエラーになってしまいますので、どちらか一方だけを取り込んで、
もう一方は取り込まずに名前空間名を付けて呼び出す必要があります。
さて、どうして名前空間を最初に紹介したかと言いますと、
今後、紹介していくであろうクラスライブラリはこの名前空間で管理されているからです。
次回は、参照型になったクラスについて紹介したいと思います。