連載

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

最終回 残されたいくつかのトピック(その3)

(株)ピーデー
川俣 晶
2003/01/18

Page1 Page2 Page3

クラス・ライブラリの概要

 最後のトピックとなるが、クラス・ライブラリの主要な名前空間と、その役割を簡単に解説しておく。完全な解説は、あまりに膨大になりすぎるので、.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
名前(Left)が衝突しているサンプル・プログラム5

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

 1: A
 2: A
サンプル・プログラム5の実行結果

 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アセンブリへの参照を取り除くと、さまざまな問題が発生する可能性がある。例えば、以下のソース・コードを、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
出力ウィンドウに、文字列に変換した数値を表示するだけサンプル・プログラム6

 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の詳細は解説し始めると、それだけで本格的な解説書のボリュームになってしまうので、本連載では割愛する。ADO.NETは、データベースに接続する新しい世代のインターフェイスであり、RDB(リレーショナル・データベース)だけでなく、XML文書などへのアクセスも実現するものである。

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

■System.DirectoryServices名前空間
 Active Directoryへのアクセス方法を提供するクラスを含む名前空間である。ADSIへの簡単なインターフェイスを提供している。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属性(本連載の第28回で解説している)などの多くの機能も、この名前空間に含まれている。

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

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

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

■System.ServiceProcess名前空間
 Windowsサービスを作成したり、制御したりするためのクラスを含む名前空間である。以前のVBはWindowsサービスを作成するために多用される言語ではなかったが、VB.NETではWindowsサービスも作りやすくなった。この名前空間のお世話になる機会も増えるかもしれない。

■System.Text名前空間
 本連載の第20回で紹介した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を利用する場合には、必ずお世話になるクラス群であるといえる。

最後に

 以上で、この連載も終わりである。かなりの分量の解説を書いたが、主に言語仕様とその周辺を中心にVB 6とVB.NETの相違点をまとめただけで、それに該当しなかったさまざまな技術トピックが非常にたくさん存在しているのも事実である。それらは、今後、Insider.NETのさまざまな記事で取り上げられていくことになるだろう。VB.NETの完全マスターは、この連載で実現するのではなく、この連載はスタートラインにすぎないといえる。

 筆者も、この連載を通して、さまざまな新しい知識に触れることができ、非常に有意義であったと思う。理屈でいえば、C#の方がよくできた言語だと思うが、BASIC言語の歴史的な重みを受け継ぐVB.NETにも、独特の味わいがある。何かBASIC言語に思い入れのある皆さん、ぜひともVB.NETにも取り組んでみようではないか。End of Article

 

 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  最終回 残されたいくつかのトピック(その3)
    1.オーバーロード/Protectedアクセス/継承を禁止するNotInheritable
    2.Sharedコンストラクタ/配列の共変性/Disposeパターン
  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 記事ランキング

本日 月間