連載

プロフェッショナルVB.NETプログラミング

第20回 クラス・ライブラリの構造

(株)ピーデー
川俣 晶
2002/10/12

Page1 Page2 Page3

プロジェクトのインポート

 クラス・ライブラリには、数が決まらないデータを保持するのに便利な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でも作成可能になったコマンドライン・アプリケーションに関する解説を予定している。End of Article


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第20回 クラス・ライブラリの構造
    1.クラス・ライブラリの価値
    2.クラス・ライブラリの構造
  3.プロジェクトのインポート
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間