連載
プロフェッショナルVB.NETプログラミング
第20回 クラス・ライブラリの構造
(株)ピーデー
川俣 晶
2002/10/12
|
|
クラス・ライブラリの構造
クラス・ライブラリを使用するには、いくつか理解しておくべき点がある。特に、似たような名前を持つこともあるが同じではない、名前空間名とライブラリのアセンブリ・ファイルの違いと、それに対処する方法はしっかりと把握しなければならない。一例として、前回のサンプル・プログラムに含まれていた電子メール送信機能を取り上げてみよう。以下は、電子メールの送信機能だけを取り出して整理したサンプル・プログラムである。
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クラスについて表示しているところ。必要条件のアセンブリのところに、そのクラスを含むアセンブリについて記載されている。 |
ここで、必要条件のアセンブリのところを見れば、必要なアセンブリの名前が分かるという仕組みである。
Insider.NET 記事ランキング
本日
月間