連載

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

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

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

Page1 Page2 Page3

クラス・ライブラリの構造

 クラス・ライブラリを使用するには、いくつか理解しておくべき点がある。特に、似たような名前を持つこともあるが同じではない、名前空間名とライブラリのアセンブリ・ファイルの違いと、それに対処する方法はしっかりと把握しなければならない。一例として、前回のサンプル・プログラムに含まれていた電子メール送信機能を取り上げてみよう。以下は、電子メールの送信機能だけを取り出して整理したサンプル・プログラムである。

  1: Private Sub SendEMail(ByVal msg As String)
  2:   Const from As String = "system@piedey.co.jp"
  3:   Const mailto As String = "hitomi@piedey.co.jp"
  4:   Const subject As String = "Sample Mail"
  5:   System.Web.Mail.SmtpMail.Send(from, mailto, subject, msg)
  6: End Sub
  7:
  8: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9:   SendEMail("Hello!")
 10: End Sub
前回のサンプル・プログラム1に含まれていた電子メール送信のための機能を取り出したサンプル・プログラム

 このサンプル・プログラムをビルドするには、System.Web.dllというライブラリへの参照を追加する必要がある。

Visual Studio .NETの[参照の追加]ダイアログ
電子メール機能を利用するためには、System.Web.dllへの参照を追加する。

 しかし、ここで使用しているSmtpMailクラスの名前空間は、System.Web.Mailであって、System.Webではない。それなのに、System.Webへの参照を追加するだけでよいのだろうか?

 この問いは根本的な誤解を含んでいる。というのは、System.Webというライブラリ(アセンブリ)の名前と、System.Webという名前空間は、直接的には結びついていないのだ。そのことは、オブジェクト・ブラウザを見ればすぐ分かる。

 例えば、ここで問題になっているSmtpMailクラスを見てみよう。

Visual Studio .NETのオブジェクト・ブラウザ
オブジェクト・ブラウザにより、参照設定されている各ライブラリ(アセンブリ)内に含まれている名前空間や、その名前空間に含まれているクラスについての情報をブラウズすることができる。

 見て分かるとおり、System.Webは、その内部にSystem.Webだけでなく、System.Web.Caching、System.Configurationなどの名前空間のクラスも持っていて、もちろん、System.Web.Mail名前空間のクラスも含んでいる。つまり、アセンブリSystem.Webを参照するだけで、System.Web.Mail名前空間が利用可能になるわけである。

 しかし逆に考えるとどうだろうか。例えば、System.Web.Mail名前空間のクラスを使いたいと思ったとき、どのアセンブリを参照に追加すればよいか、どのように判断すべきだろうか? それを判断すべき単純なルールはない。そもそも、ある名前空間に対応するアセンブリが1個に決まるとは限らないからだ。例えば、オブジェクト・ブラウザでアセンブリmscorlibを見るとSystem名前空間を含んでいることが分かる。

 ところが、これとは別にSystemというアセンブリもあって、これにもSystem名前空間が含まれている。

同じ名前の名前空間「System」が、異なる2つのアセンブリに存在している

 あるクラスを利用したいときに、どのアセンブリを参照に追加すべきかを判断する最も正しい方法は、クラス・ライブラリのリファレンスを読むことである。例えばSmtpMailクラスなら、以下のようにリファレンスを参照する。

クラス・ライブラリのリファレンス画面
SmtpMailクラスについて表示しているところ。必要条件のアセンブリのところに、そのクラスを含むアセンブリについて記載されている。

 ここで、必要条件のアセンブリのところを見れば、必要なアセンブリの名前が分かるという仕組みである。


 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 記事ランキング

本日 月間