|
|
連載
改訂版
プロフェッショナルVB.NETプログラミング
Chapter 08 クラス・ライブラリ
株式会社ピーデー
川俣 晶
2004/05/27 |
|
|
クラス・ライブラリには、あらかじめ扱う数量が決まらないデータを保持するのに便利なSystem.Collections.ArrayListクラスというものがある。配列は値を入れる前にサイズを指定するが、このクラスは値を入れることで、必要に応じていくらでも大きくなるのが特徴である。リスト8-10はそれを利用したサンプル・プログラムである。
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
|
|
リスト8-10 ArrayListクラスを利用したプログラム
|
これを実行すると以下のようになる。
1: カレーライス
2: ハヤシライス
3: 麻婆ライス
|
|
リスト8-11 リスト8-10の実行結果
|
ソース・コードの8〜10行目で使用しているAddメソッドは、新しいデータを追加するメソッド、11行目のSortメソッドは、データのソート(並べ替え)を行うメソッドである。そして、13〜15行目のFor Each構文で結果を出力している。
さて、ここで疑問を感じないだろうか? System.Collections.ArrayListクラスを利用するにあたって、いきなり、7行目のようにArrayListというキーワードを書き込んでいる。かといって、Importsステートメントによって、System.Collections名前空間をデフォルトの名前空間としているわけでもない。
この謎は、VBプロジェクトの設定について知ることで解決できる。プロジェクトのプロパティを開くと、以下のような項目が存在することが分かる。このダイアログは、ソリューションエクスプローラでプロジェクト名を右クリックし、[プロパティ]をクリックすると開くことができる。
|
●図8-12 Visual Studio .NETの[プロパティページ]ダイアログ |
ここで指定された名前空間については、Importsステートメントがソースの先頭に書かれたのと同じように、名前空間名を省略して記述することができる。Windowsアプリケーションのプロジェクトを作成すると、デフォルトでこの7つの名前空間がここに登録されており、これに属するクラスは、いちいち名前空間を含むフルネームで示したり、Importsステートメントを使ったりするまでもなく、直接クラス名をソース・コードに記述することができるのである。なお、ここに設定されている名前空間の数と種類は、プロジェクトの種類によって異なる。図8-12は、Windowsアプリケーションの例である。
この機能を確認するために、プロジェクトのプロパティからSystem.Collectionを削除してみよう。
|
●図8-13 [プロジェクトのインポート]でSystem.Collectionを選択し、[削除]ボタンをクリックした画面 |
これでビルドすると、「error BC30002: 型 'ArrayList' が定義されていません」というメッセージが表示され、ビルドに失敗する。しかし、このクラスを含むアセンブリへの参照まで削除したわけではないので、名前空間を含むフルネームでクラスを記述すればビルドを成功させることができる。そのように書き直したサンプル・プログラムが、リスト8-14である。
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
|
|
リスト8-14 リスト8-10のArrayListクラスをフルネームで記述したプログラム
|
7行目のクラス名が、名前空間を含むフルネームに変化したわけである。
あるいは、先頭にImports System.Collectionsを追加しても、正常に動作させることができる。下記リスト8-15の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
|
|
リスト8-15 リスト8-10の先頭にImportsステートメントを追加したプログラム
|
ソリューションエクスプローラを表示させると、プロジェクト名の下に参照設定というサブツリーが見える。
|
●図8-16 Visual Studio .NETのソリューションエクスプローラ |
プロジェクト名(ここではSample003n)の下にある参照設定を開くと、参照設定されているアセンブリ名がツリー表示される。
ここに表示されているSystemやSystem.Dataなどの名前は、参照設定されたアセンブリの名前である。名前空間の名前ではないので、注意が必要である。例えば、この例ではSystem.Collections名前空間のクラスを利用しているが、参照リストにSystem.Collectionsという名前は見えない。しかし、名前空間と名前とアセンブリの名前は1対1に対応するわけではないので、問題はない。
余談だが、System.Collections名前空間をオブジェクトブラウザで見ると、mscorlibというアセンブリの中にあることが分かる。
|
●図8-17 オブジェクトブラウザで表示させたSystem.Collections名前空間 |
しかし、ソリューションエクスプローラにはそのようなアセンブリ名は見えない。「Microsoft Visual Basic .NET Runtime」というアセンブリも同様である。この2つは、システムがデフォルトで暗黙のうちに参照するモジュールであり、基本的にはVB.NETを利用する限りデフォルトで参照されると思っておけばよいだろう。つまり、ソリューションエクスプローラの参照設定から何もかも取り除いたとしても、参照されているモジュールが存在するわけである。
業務アプリInsider 記事ランキング
本日
月間