連載

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

Chapter 08 クラス・ライブラリ

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


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

クラス・ライブラリに含まれるさまざまな名前空間

 クラス・ライブラリの主要な名前空間と、その役割を簡単に解説しておく。完全な解説は本連載のテーマから外れるだけでなく、あまりに膨大になりすぎるため、本連載のページをすべて使っても載せきれない。詳しく内容を知りたい方は、.NET Frameworkのリファレンスなどを参照していただきたい。

■Microsoft.VisualBasic名前空間

 VB.NETの実行時に使用されるさまざまな機能が収められている。VB 6では言語に組み込まれていた多くの機能が、VB.NETではこの名前空間の下に存在するように変更されている。しかし、この名前空間は、基本的にVB.NETではデフォルトで参照されるので、特に意識する必要はないかもしれない。ただ、名前の衝突が起こった場合は、名前空間を含むフルネームで指定することで回避できる可能性があるので、覚えておく価値がある。

 実際に名前が衝突している事例を以下のサンプル・プログラムで示す。

1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2:   'Trace.WriteLine(Left("ABC", 1))
3:   Trace.WriteLine(Microsoft.VisualBasic.Left("ABC", 1))
4:   Trace.WriteLine(Microsoft.VisualBasic.Strings.Left("ABC", 1))
5: End Sub
リスト8-18 名前(Left)が衝突しているプログラム

 これを実行すると以下のようになる。

1: A
2: A
リスト8-19 リスト8-18の実行結果

 ソースの2行目は、コメントを取り去るとエラーになる。これは、フォームのLeftプロパティと文字列の左側を取り出すLeft関数の名前が衝突するからだ。クラス・ライブラリのリファレンスを見ると、Microsoft.VisualBasic.Leftで関数を完全修飾する必要があると記されている。そのように(3行目)記述すれば動作するようになる。

 しかし、本来Microsoft.VisualBasicは名前空間名であって、クラス名ではない。名前空間はメソッドを持てないので、これはちょっとおかしく見える。実際にオブジェクトブラウザで調べると、Leftは本来、Microsoft.VisualBasic名前空間に存在するStringsクラスのメソッドであることが分かる。では、Microsoft.VisualBasic.Strings.Left(……)というように表記したらどうなるのかを試したのが、ソースの4行目である。見てのとおり、この表記でも動作する。恐らく、Microsoft.VisualBasic.Leftは、Microsoft.VisualBasic.Strings.Leftの一種の省略記法として提供されたものであろう。

■System名前空間

 System名前空間は、ごく基本的な機能を提供するクラスが集められた名前空間である。同じSystemと付いていても、System.Data名前空間などは、System名前空間に属さない。System名前空間に含まれるクラスは、例えば、ゼロ除算例外クラスであるDivideByZeroExceptionクラスのように、実行中にどうしても必要になる可能性があるような、必須のクラスが集められている。その中には、データ形式を変換するSystem.Convertクラスのような比較的役割が分かりやすいものから、System.Void構造体のように利用目的が簡単には分かりにくいものまで揃っている。

 すでに述べたとおり、System名前空間のかなりの部分は、Systemアセンブリではなく、mscorlibアセンブリ(Mscorlib.dll)に含まれているので、Systemアセンブリへの参照を強引に取り去ったとしても、System名前空間の多くのクラスが利用可能である。ただし、Systemアセンブリには、System名前空間以外の名前空間のクラスも含んでいるので、Systemアセンブリへの参照を取り除くと、さまざまな問題が発生する可能性がある。例えば、リスト8-20のソース・コードを、Systemアセンブリへの参照を取り除いた状態でビルドしてみるとする。

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:     Trace.WriteLine(System.Convert.ToString(123))
8:   End Sub
9: End Class
リスト8-20 出力ウィンドウに、文字列に変換した数値を表示するプログラム

 System.Convertクラスが見つからないというエラーが出るかと思いきや、その前に「error BC30007: 基本クラス'System.ComponentModel.Component'を含むアセンブリ'System'への参照が必要です。参照をプロジェクトに追加してください」といったエラーが発生する。これは、System.ComponentModel.Componentクラスも、Systemアセンブリに含まれているためである。

■System.CodeDom名前空間

 ソース・コードの構造を表現するクラス群が集まった名前空間である。ソース・コード自身を対象にしたツールなどを作成するのに便利なものである。しかし、一般のプログラマーからは縁遠い存在かもしれない。むしろ、この名前空間のクラスを活用したツールを便利に活用する形で恩恵を受けることになるだろう。

■System.Collections名前空間

 データを集めて扱うクラス群を含む名前空間である。もちろん、データを集めて扱うといえば、配列が代表的な機能だが、配列は原始的であるため、データを集めるさまざまな方法がこの名前空間で提供されている。具体的には、リスト、キュー、ビット配列、ハッシュテーブル、ディクショナリなどが用意されている。VB 6のDictionaryオブジェクトが強化されたような、多数のクラスがあると思えば分かりやすいだろう。

■System.ComponentModel名前空間

 コンポーネントモデルに関するクラスを多数含む名前空間である。コンポーネントのデザイン時と実行時の動作を規定するクラスがあり、これを元に、フォーム上にコントロールを並べてデザインし、動作させる機能が実現されている。この名前空間も直接利用する機会は少ないかもしれないが、フォームのデザイナなどの背後で活躍している名前空間である。

■System.Configuration名前空間

 .NET Frameworkの構成設定を保持する構成ファイル(.configファイル)にアクセスするなどの処理を行うクラスを含む名前空間である。この名前空間も直接利用する機会は少ないかもしれないが、普段の作業の背後で活躍しているといえる。どうしても普通のやり方では満足できなくなったときに直接利用すべき名前空間だろう。

■System.Data名前空間

 主にADO.NETを実現するクラスを含む名前空間である。ADO.NETは、データベースに接続する新しい世代のインターフェイスであり、RDB(リレーショナルデータベース)だけでなく、XML文書などへのアクセスも実現するものである(ADO.NETについての詳細な解説は専門書に譲る)。

■System.Diagnostics名前空間

 システムの低レベルな処理やシステム管理に関係するクラスを含む名前空間である。VB.NETのTraceやDebugは、この名前空間に属するSystem.Diagnostics.Traceクラスや、System.Diagnostics.Debugクラスそのものである。また、プロセス管理やイベントログの処理などのクラスも含まれている。

■System.DirectoryServices名前空間

 Active Directoryへのアクセス方法を提供するクラスを含む名前空間である。ADSI(Active Directory Service Interfaces)への簡単なインターフェイスを提供している。Active Directoryは、Windowsが提供するディレクトリサービスである。

■System.Drawing名前空間

 GDI+へのインターフェイスを提供するクラスを含む名前空間である。主に画面やプリンタに対するグラフィックや文字の描画機能を持つ。Windowsアプリケーションのプロジェクトを新規作成すれば、デフォルトで参照が設定されている。

■System.EnterpriseServices名前空間

 エンタープライズアプリケーションのためのクラスを含む名前空間である。COM+オブジェクトにアクセスするサービスアーキテクチャなどを含んでいる。

■System.Globalization名前空間

 国際化のための各種クラスを含む名前空間である。ただし、ほとんどの場合、各種クラスはデフォルトロケール(日本仕様のPCなら、日本と日本語)の設定に従うので、この名前空間は使用しなくても済むことが多いだろう。しかし、細かい部分で自分の望みどおりに数値、価格、日付、時刻などのフォーマットを処理させるには、この名前空間に含まれるクラスを利用する必要がある。

■System.IO名前空間

 各種入出力に利用するストリームや、Reader/Writerなどのクラスを含む名前空間である。入出力だけでなく、プログラム内でのデータのやりとりに使う場合もある。例えば、メモリブロックや文字列をファイルと同様に読み書きする手段も提供されている。

■System.Management名前空間

 WMI(Windows Management Instrumentation)インフラストラクチャへのインターフェイスなどを提供するクラスを含む名前空間である。WMIは、オブジェクト指向インターフェイスを使うスケーラブルなシステム管理インフラストラクチャである。

■System.Messaging名前空間

 メッセージキューの機能を提供するクラスを含む名前空間である。アプリケーション間などでデータをキューイングしたいときに利用できるだろう。

■System.Net名前空間

 ネットワークに関する基本的な機能を提供するクラスを含む名前空間である。低レベルのIP通信関連の機能だけでなく、DNSやWebサーバとの通信におけるクライアント機能を提供する機能なども含んでいる。Visual Studio .NETでWebアプリケーションのプロジェクトなどを作成していると、直接触れなくてもシステムが構築できるかもしれないが、思いどおりにネットワークを扱いたい場合は、この名前空間のクラスに直接アクセスすることが役に立つだろう。

■System.Reflection名前空間

 プログラムの実行時に、システムのデータ構造などにアクセスする手段を提供する機能である。たとえコーディング時に未知であったクラスであっても、その構造にアクセスすることができる。直接利用する機会は少ないかもしれないが、強力なライブラリなどを開発し得る機能であり、この名前空間の機能によって作られたツールやライブラリのお世話になる可能性は高いだろう。

■System.Resources名前空間

 プログラムに付加されるリソースを扱うための各種機能を提供するクラスを含む名前空間である。複数言語対応などを意識した場合に有益な機能といえるだろう。

■System.Runtime.InteropServices名前空間

 COMオブジェクトやWin32 APIにアクセスするためのクラスを含む名前空間である。APIの直接呼び出しなどを行うときに使用されるMarshalAs属性(Declare文の引数型を変換するMarshalAs属性(本連載Chapter 14で公開予定)を参照)などの多くの機能も、この名前空間に含まれている。

■System.Runtime.Remoting名前空間

 分散アプリケーションを作成する場合に使用するクラスを含む名前空間である。リモートオブジェクトを実現するなどの機能を持つ。

■System.Runtime.Serialization名前空間

 オブジェクトのシリアル化に関する機能を持つ。シリアル化とは、オブジェクトの内容をバイト列に変換する処理である。オブジェクトの内容を保存したり、遠隔地のホストに転送して処理するなどといった処理を行う場合に必須となる機能である。

■System.Security名前空間

 セキュリティに関するクラスを含む名前空間である。.NET Frameworkは厳重なセキュリティ機能を持っており、多くの条件でさまざまな機能がロックされる。その挙動を思いどおりにコントロールするために必要な名前空間である。

■System.ServiceProcess名前空間

 Windowsサービスを作成したり、制御したりするためのクラスを含む名前空間である。Windowsサービスとは、ログオンしなくてもバックグラウンドで動き続けるプログラムである。以前のVBは、Windowsサービスを作成するために多用される言語ではなかったが、VB.NETではWindowsサービスも作りやすくなった。この名前空間のお世話になる機会も増えるかもしれない。

■System.Text名前空間

 クラス・ライブラリを使ってみるなどで例として取り上げたSystem.Text.StringBuilderクラスと、文字コード変換に関するクラスを含む名前空間である。例えば、シフトJIS形式のファイルを読み書きしようという際に、黙ってお世話になる名前空間である。デフォルトでこの名前空間はインポートされていないが、非常に利用頻度の高いものではないだろうか。

■System.Threading名前空間

 マルチスレッドやスレッド間の同期を実現するためのクラスを含む名前空間である。VBプログラマーにとって、マルチスレッドは長い間縁遠い機能であったが、現在マルチスレッドをVBプログラムから利用する障害は取り除かれている。もしこれを活用するなら、必須の名前空間となる。

■System.Timers名前空間

 指定した間隔でイベントを発生させるクラスを含む名前空間である。従来のVBのタイマーは、フォーム上に配置したコントロールがイベントを発生させる仕組みであったが、このクラスは、マルチスレッドベースで直接言語のイベント機能によるイベントを発生させるため、より正確なタイミングで時間を通知することができる。

■System.Web名前空間

 Webアプリケーションや、Webサービスなどを実現するための多くのクラスを含む名前空間である。主に、HTTPプロトコルに関する機能を持っている。ASP.NETによるWebアプリケーションやWebサービスなどを開発する際は、大いにお世話になるだろう。

■System.Xml名前空間

 XML(Extensible Markup Language)を扱うための機能を持ったクラスを含む名前空間である。XMLを利用する場合には、必ずお世話になるクラス群である。End of Article

VB6プログラマーのための入門 Visual Basic .NET 独習講座』

 本記事は、(株)技術評論社が発行する書籍『VB6 プログラマーのための 入門 Visual Basic .NET 独習講座』から
許可を得て転載したものです。

【本連載と書籍の関係について 】
 この書籍は、本フォーラムで連載した「連載 プロフェッショナル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