|
|
連載
改訂版
プロフェッショナルVB.NETプログラミング
Chapter 06 名前空間
株式会社ピーデー
川俣 晶
2004/04/29 |
|
|
ピリオド記号(.)は、名前空間名とそのほかの名前を区切るために用いられるほか、名前空間名の一部として用いることもできる。例えば、MySpace1.MySpace2という名前を、名前空間名として用いることもできる。実際、これが実現できなければ、暗黙の名前空間名で述べたように、プロジェクトSample001でNamespace MySpace1として宣言される名前空間の真の名前が、Sample001.MySpace1であるという仕様は許されなくなってしまう。ピリオド記号は、Namespace宣言で指定する名前の一部としても問題なく指定できるので、Namespace MySpace1.MySpace2と記述してもよい。その際、Importsステートメントで指定する別名は、このように指定される名前空間名の一部を置き換える形でもよい。文字で説明しても分かりにくいかもしれないので、さっそくサンプル・プログラムを見てみよう。
1: Imports a = Sample006n.MySpace1
2:
3: Namespace MySpace1.MySpace2
4: Public Class MyClass1
5: Public Shared Sub MyMethod1()
6: Trace.WriteLine("MySpace1.MySpace2.MyClass1.MyMethod1 called")
7: End Sub
8: End Class
9: End Namespace
10:
11: Public Class Form1
12: Inherits System.Windows.Forms.Form
13:
14: …Windows フォーム デザイナで生成されたコード…
15:
16: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
17: Sample006n.MySpace1.MySpace2.MyClass1.MyMethod1()
18: a.MySpace2.MyClass1.MyMethod1()
19: End Sub
20: End Class
|
|
リスト6-14 ピリオドで区切られた名前空間名を使用したプログラム
|
これを実行すると以下のようになる。
1: MySpace1.MySpace2.MyClass1.MyMethod1 called
2: MySpace1.MySpace2.MyClass1.MyMethod1 called
|
|
リスト6-15 リスト6-14の実行結果
|
このソースの1行目では、Importsステートメントを用いて、“a”というキーワードに、Sample006n.MySpace1という名前空間名の一部を対応付けている。そして、18行目ではこの“a”というキーワードを用いて、
a.MySpace2.MyClass1.MyMethod1()
としてメソッド呼び出しを行っている。名前空間名はMySpace1.MySpace2なので、この名前の一部だけがImportsステートメントによる別名定義の対象になっているが、このような記述方法を行っても問題はない。実際、このソースは問題なく実行できる。また、ソース17行目と18行目は機能的に等価である。
本項はC#に関する知識が少し必要だが、分からない読者はC#のソースを読み飛ばしても構わない。
.NET Framework上では、異なるプログラム言語で記述されたクラス・ライブラリを呼び出すことが容易である。しかし、プログラム言語によって名前空間名の扱いが微妙に違うことに注意が必要である。例えば、同じような機能を持つVB.NETで記述されたクラス・ライブラリと、C#で記述されたクラス・ライブラリがあったとしよう。VB.NETで記述されたクラス・ライブラリは次のような内容だったとする(リスト6-16)。
1: Namespace MySpace1
2: Public Class Class1
3: Public Shared Sub MyMethod1()
4: Trace.WriteLine("MySpace1.Class1.MyMethod1 called")
5: End Sub
6: End Class
7: End Namespace
|
|
リスト6-16 VB.NETでクラス・ライブラリを記述したプログラム(プロジェクト名ClassLibrary1)
|
次に、C#で記述されたクラス・ライブラリは次のような内容だったとする(リスト6-17)。
1: using System;
2:
3: namespace MySpace2
4: {
5: public class Class1
6: {
7: public static void MyMethod1()
8: {
9: System.Diagnostics.Trace.WriteLine("MySpace2.Class1.MyMethod1 called");
10: }
11: }
12: }
|
|
リスト6-17 C#でクラス・ライブラリを記述したプログラム(プロジェクト名ClassLibrary2)
|
以上の2つのクラス・ライブラリのプロジェクトを参照して利用するソース・コードは、リスト6-18のようになる。
1: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
2: ClassLibrary1.MySpace1.Class1.MyMethod1()
3: MySpace2.Class1.MyMethod1()
4: End Sub
|
|
リスト6-18 リスト6-16、6-17を利用するVB.NETのプログラム
|
これを実行すると以下のようになる。
1: MySpace1.Class1.MyMethod1 called
2: MySpace2.Class1.MyMethod1 called
|
|
リスト6-19 リスト6-18の実行結果
|
2つのクラス・ライブラリは、ソース上では同じように記述されているように見えるが、呼び出すときのメソッド名のフルネームの記述方法が違っている。VB.NETで記述したクラス・ライブラリを呼び出す場合には、ClassLibrary1というキーワードを含む名前空間名を記述するが、C#で記述したクラス・ライブラリを呼び出す場合には、Namespace宣言で記述したとおりの名前を書くだけでよい。
この動作の相違は、VB.NETのNamespace宣言とC#のnamespace宣言の挙動の相違によって引き起こされるものである(VB.NETは先頭が大文字のNamespaceキーワードを使うが、C#は先頭が小文字のnamespaceキーワードを使う)。VB.NETのNamespace宣言は、暗黙のうちに名前の先頭にプロジェクト名を付加するが、C#のnamespace宣言はそうではない。クラス・ライブラリの作成や利用の際には注意が必要である。
Namespace宣言を用いずに記述されたクラスなども、実際にはプロジェクト名と同じ名前空間に属している。そのことは、オブジェクトブラウザで容易に確認することができる。例えば、フォームを定義するForm1クラスは、プロジェクト名と同じ名前の名前空間に属している。そこで、プロジェクト名がaなら、Form1をa.Form1と記述してもコンパイラは理解する。
しかし、リスト6-20のように、スタートアップ・フォームとなっているForm1を勝手なNamespace宣言で囲むとコンパイラはエラーを引き起こす。
1: Namespace MySpace1
2: Public Class Form1
3: Inherits System.Windows.Forms.Form
4:
5: …Windows フォーム デザイナで生成されたコード…
6:
7: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
8: Trace.WriteLine("Form1_Load called")
9: End Sub
10: End Class
11: End Namespace
|
|
リスト6-20 スタートアップ・フォームとなっているForm1を独自の名前空間で囲ったプログラム(コンパイル・エラーとなる)
|
このソースをコンパイルすると「'Sub Main' が、'Sample008n.Form1' に見つかりませんでした」というエラー・メッセージが出力される。このようなエラーが出力される理由は、プロジェクトのプロパティで指定されているスタートアップ・フォームがSample008n.Form1であるにも関わらず、ソース上でNamespace宣言を挿入して名前空間を含む完全な名前(完全限定名という)を変更してしまったことにある。これを解決するには、スタートアップ・フォームの名前を変更するか、Namespace宣言を取り除く必要がある。
『VB6プログラマーのための入門 Visual Basic .NET 独習講座』
本記事は、(株)技術評論社が発行する書籍『VB6 プログラマーのための 入門 Visual Basic .NET 独習講座』から許可を得て転載したものです。
【本連載と書籍の関係について 】
この書籍は、本フォーラムで連載した「連載 プロフェッショナルVB.NETプログラミング」を大幅に加筆修正し、発行されたものです。技術評論社、および著者である川俣晶氏のご好意により、書籍の内容を本フォーラムの連載記事として掲載させていただけることになりました。
→技術評論社の解説ページ
ご注文はこちらから
|
業務アプリInsider 記事ランキング
本日
月間