連載

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

Chapter 08 クラス・ライブラリ

株式会社ピーデー 川俣 晶
2004/05/27
Page1 Page2 Page3 Page4


 本記事は、(株)技術評論社が発行する書籍『VB6プログラマーのための入門 Visual Basic .NET 独習講座』の一部分を許可を得て転載したものです。同書籍に関する詳しい情報については、本記事の最後に掲載しています。

Importsステートメントを記述せずに参照できる名前空間

 クラス・ライブラリには、あらかじめ扱う数量が決まらないデータを保持するのに便利な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を利用する限りデフォルトで参照されると思っておけばよいだろう。つまり、ソリューションエクスプローラの参照設定から何もかも取り除いたとしても、参照されているモジュールが存在するわけである。


 INDEX
  [連載] 改訂版 プロフェッショナルVB.NETプログラミング
  Chapter 08 クラス・ライブラリ
    1.なぜクラス・ライブラリなのか/クラス・ライブラリを使ってみる
    2.名前空間とアセンブリの関係/Importsステートメントによる短縮表記
  3.Importsステートメントを記述せずに参照できる名前空間/ソリューションエクスプローラに表示される参照設定の意味
    4.クラス・ライブラリに含まれるさまざまな名前空間
 
「改訂版 プロフェッショナル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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH