連載
プロフェッショナルVB.NETプログラミング
第20回 クラス・ライブラリの構造
(株)ピーデー
川俣 晶
2002/10/12
|
|
プロジェクトのインポート
クラス・ライブラリには、数が決まらないデータを保持するのに便利なSystem.Collections.ArrayListクラスというものがある。配列は値を入れる前にサイズを指定するが、このクラスは値を入れることで、必要に応じていくらでも大きくなるのが特徴である。以下はそれを利用したサンプル・プログラムである。
1: Public Class Form1
2: Inherits System.Windows.Forms.Form
3:
4: …Windows フォーム デザイナで生成されたコード…
5:
6: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
7: Dim ar As New ArrayList()
8: ar.Add("ハヤシライス")
9: ar.Add("カレーライス")
10: ar.Add("麻婆ライス")
11: ar.Sort()
12: Dim s As String
13: For Each s In ar
14: Trace.WriteLine(s)
15: Next
16: End Sub
17: End Class
|
|
ArrayListクラスを利用したサンプル・プログラム2 |
これを実行すると以下のようになる。
1: カレーライス
2: ハヤシライス
3: 麻婆ライス
|
|
サンプル・プログラム2の実行結果 |
ソース・コードの8〜10行目で使用しているAddメソッドは新しいデータを追加するメソッド。11行目のSortメソッドは、データのソート(並べ替え)を行うメソッドである。そして、13〜15行目のFor Each構文で結果を出力している。
さて、ここで疑問を感じないだろうか? System.Collections.ArrayListクラスを利用するにあたって、いきなり、7行目のようにArrayListというキーワードを書き込んでいる。かといって、Imports文をソース先頭に書いてSystem.Collections名前空間をデフォルトの名前空間としているわけでもない。
このなぞは、VBプロジェクトの設定について知ることで解決できる。プロジェクトのプロパティを開くと以下のような項目が存在することが分かる。
|
Visual Studio .NETの[プロパティ ページ]ダイアログ |
ソリューション・エクスプローラでプロジェクト名を右クリックし、[プロパティ]をクリックすると開く。このダイアログの[プロジェクトのインポート]で指定されている名前空間のクラスは、直接使用することができる。 |
ここで指定された名前空間は、Imports文がソースの先頭に書かれたのと同じように、名前空間名を省略して記述することができる。Windowsアプリケーションのプロジェクトを作成すると、デフォルトでこの7つの名前空間がここに登録されており、これに属するクラスは、いちいち名前空間を含むフルネームで示したり、Imports文を使ったりするまでもなく、直接クラス名をソース・コードに記述することができるのである。
この機能を確認するために、プロジェクトのプロパティからSystem.Collectionを削除してみよう。
|
[プロジェクトのインポート]でSystem.Collectionを選択し、[削除]ボタンをクリックした画面 |
すると、ビルドしても「error BC30002: 型 'ArrayList' が定義されていません。」というメッセージが表示され、ビルドに失敗する。しかし、このクラスを含むアセンブリへの参照まで削除したわけではないので、名前空間を含むフルネームでクラスを記述すればビルドを成功させることができる。そのように書き直したサンプル・プログラムは下記のようになる。
1: Public Class Form1
2: Inherits System.Windows.Forms.Form
3:
4: …Windows フォーム デザイナで生成されたコード…
5:
6: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
7: Dim ar As New System.Collections.ArrayList()
8: ar.Add("ハヤシライス")
9: ar.Add("カレーライス")
10: ar.Add("麻婆ライス")
11: ar.Sort()
12: Dim s As String
13: For Each s In ar
14: Trace.WriteLine(s)
15: Next
16: End Sub
17: End Class
|
|
サンプル・プログラム2のArrayListクラスをフルネームで記述したサンプル・プログラム3 |
7行目のクラス名が、名前空間を含むフルネームに変化したわけである。
あるいは、先頭にImports System.Collectionsを追加しても、正常に動作させることができる。下記のサンプル・プログラムの1行目を参照していただきたい。
1: Imports System.Collections
2:
3: Public Class Form1
4: Inherits System.Windows.Forms.Form
5:
6: …Windows フォーム デザイナで生成されたコード…
7:
8: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
9: Dim ar As New ArrayList()
10: ar.Add("ハヤシライス")
11: ar.Add("カレーライス")
12: ar.Add("麻婆ライス")
13: ar.Sort()
14: Dim s As String
15: For Each s In ar
16: Trace.WriteLine(s)
17: Next
18: End Sub
19: End Class
|
|
サンプル・プログラム2の先頭にImports文を追加したサンプル・プログラム4 |
ソリューション・エクスプローラに表示される参照設定の意味
ソリューション・エクスプローラを表示させると、プロジェクト名の下に参照設定というサブツリーが見える。
|
Visual Studio .NETのソリューション・エクスプローラ |
プロジェクト名(ここではSample003n)の下にある参照設定を開くと、参照設定されているアセンブリ名がツリー表示される。 |
ここに表示されているSystemやSystem.Dataなどの名前は、参照設定されたアセンブリの名前である。名前空間の名前ではないので、注意が必要である。例えば、この例ではSystem.Collections名前空間のクラスを利用しているが、参照リストにSystem.Collectionsという名前は見えない。しかし、名前空間と名前とアセンブリの名前は1対1に対応するわけではないので、問題はない。
余談だが、System.Collections名前空間をオブジェクト・ブラウザで見ると、mscorlibというアセンブリの中にあることが分かる。
|
オブジェクト・ブラウザで表示させたSystem.Collections名前空間 |
System.Collections名前空間は、mscorlibというアセンブリに含まれていることが分かるが、ソリューション・エクスプローラの参照設定では、このアセンブリは表示されない。 |
しかし、ソリューション・エクスプローラにはそのようなアセンブリ名は見えない。「Microsoft Visual Basic .NET Runtime」というアセンブリも同じである。この2つは、システムがデフォルトで暗黙のうちに参照するモジュールであり、基本的にはVB.NETを利用する限りデフォルトで参照されると思っておけばよいだろう。つまり、ソリューション・エクスプローラの参照設定から何もかも取り除いたとしても、参照されているモジュールが存在するわけである。
次回予告
次回はVBでも作成可能になったコマンドライン・アプリケーションに関する解説を予定している。
Insider.NET 記事ランキング
本日
月間