連載

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

第17回 名前空間とImports文(前編)

(株)ピーデー
川俣 晶
2002/09/21

Page1 Page2

デフォルトの名前空間を指定するImports文

 名前空間の機能は便利だが、これを多用すると、全体的にソース・コードが長くなってしまう。同じ名前のクラスが出現する頻度はさして高いものではなく、それ以外の状況ではできるだけソースを短く書きたいと考えることは、当然の成り行きといえる。これに対応するために、VB.NETにはImports文が存在する。Imports文は、名前空間名を省略したときのデフォルト名前空間名を指定するために使用することができる。例えば、名前空間名を省略したときに、Sample003n.MySpace1であると指定したサンプル・プログラムが以下のものである。

  1: Imports Sample003n.MySpace1
  2:
  3: Namespace MySpace1
  4:   Public Class MyClass1
  5:     Public Shared Sub MyMethod1()
  6:       Trace.WriteLine("MySpace1.MyClass1.MyMethod1 called")
  7:     End Sub
  8:   End Class
  9: End Namespace
 10:
 11: Namespace MySpace2
 12:   Public Class MyClass1
 13:     Public Shared Sub MyMethod1()
 14:       Trace.WriteLine("MySpace2.MyClass1.MyMethod1 called")
 15:     End Sub
 16:   End Class
 17: End Namespace
 18:
 19: Public Class Form1
 20:   Inherits System.Windows.Forms.Form
 21:
 22: #Region " Windows フォーム デザイナで生成されたコード "
 23:
 24:   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 25:     MyClass1.MyMethod1()
 26:     MySpace2.MyClass1.MyMethod1()
 27:   End Sub
 28: End Class
デフォルト名前空間名を指定するためにImports文を使用したVB.NETのサンプル・プログラム3

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

 1: MySpace1.MyClass1.MyMethod1 called
 2: MySpace2.MyClass1.MyMethod1 called
サンプル・プログラム3の実行結果

 25行目では、名前空間名の指定を省略して、いきなりMyClass1というクラス名を記述している。このソースには、MyClass1というクラスは2つあるが、コンパイラは混乱することはない。なぜなら、1行目のImports文により、省略時のデフォルト名前空間名がSample003n.MySpace1であると指示されているからだ。そのため、25行目のMyClass1は名前空間Sample003n.MySpace1(つまり、「Namespace MySpace1」で宣言された名前空間)であることが明確なのである。一方、もう1つの名前空間に属するMyClass1を利用するには、依然として、26行目のように、名前空間名を明示した長い書き方を必要としている。

 Imports文は1つに限らずいくつ書いてもよい。つまり、デフォルトの名前空間名は、いくつでも持つことができる。クラス名の重複など、そうめったに起こることではないので、複数のデフォルトの名前空間名を指定しても、通常は問題は起こらない。もし、名前の重複が起きた場合だけ、名前空間名を含むフルネームで記述するようにすれば、問題はない。

 ちなみに、実際に利用する場合は、1つのソースに全部収まっているわけではなく、いくつものソースに分かれていることが多いだろう。例えば、以下のような感じである。

 まずクラスの定義となるソース・コード。

  1: Namespace MySpace1
  2:   Public Class MyClass1
  3:     Public Shared Sub MyMethod1()
  4:       Trace.WriteLine("MySpace1.MyClass1.MyMethod1 called")
  5:     End Sub
  6:   End Class
  7: End Namespace
  8:
  9: Namespace MySpace2
 10:   Public Class MyClass1
 11:     Public Shared Sub MyMethod1()
 12:       Trace.WriteLine("MySpace2.MyClass1.MyMethod1 called")
 13:     End Sub
 14:   End Class
 15: End Namespace
サンプル・プログラム3のクラス定義部分を1つのソースにしたVB.NETのサンプル・プログラム4(プロジェクト名は「Sample004n」とする)

 次にクラスの利用を記述したソース・コード。

  1: Imports Sample004n.MySpace1
  2:
  3: Public Class Form1
  4:   Inherits System.Windows.Forms.Form
  5:
  6: #Region " Windows フォーム デザイナで生成されたコード "
  7:
  8:   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9:     MyClass1.MyMethod1()
 10:     MySpace2.MyClass1.MyMethod1()
 11:   End Sub
 12: End Class
サンプル・プログラム4を利用するVB.NETのサンプル・プログラム5

別名を定義するImports文

 Imports文には、デフォルトの名前空間名を指定する機能のほかに、名前空間名やクラス名の別名を定義する機能がある。例えば、Sample005n.MySpace1という名前空間名を「a」という名前で指定可能にし、Sample005n.MySpace2.MyClass1というクラス名を「b」という名前で指定可能にして利用したサンプル・プログラムを以下に示す(Sample005nはこのサンプル・プログラムのプロジェクト名)。

  1: Imports a = Sample005n.MySpace1
  2: Imports b = Sample005n.MySpace2.MyClass1
  3:
  4: Namespace MySpace1
  5:   Public Class MyClass1
  6:     Public Shared Sub MyMethod1()
  7:       Trace.WriteLine("MySpace1.MyClass1.MyMethod1 called")
  8:     End Sub
  9:   End Class
 10: End Namespace
 11:
 12: Namespace MySpace2
 13:   Public Class MyClass1
 14:     Public Shared Sub MyMethod1()
 15:       Trace.WriteLine("MySpace2.MyClass1.MyMethod1 called")
 16:     End Sub
 17:   End Class
 18: End Namespace
 19:
 20: Public Class Form1
 21:   Inherits System.Windows.Forms.Form
 22:
 23: #Region " Windows フォーム デザイナで生成されたコード "
 24:
 25:   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 26:     a.MyClass1.MyMethod1()
 27:     b.MyMethod1()
 28:   End Sub
 29: End Class
Imports文により名前空間名やクラス名の別名を定義したVB.NETのサンプル・プログラム6

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

 1: MySpace1.MyClass1.MyMethod1 called
 2: MySpace2.MyClass1.MyMethod1 called
サンプル・プログラム6の実行結果

 このプログラムでは、1〜2行目で、キーワード「a」が名前空間Sample005n.MySpace1であるとし、キーワード「b」がSample005n.MySpace2.MyClass1であると宣言している。そのため、26行目では、

Sample005n.MySpace1.MyClass1.MyMethod1()

と記述する代わり、

a.MyClass1.MyMethod1()

と記述することで等価な機能を短く記述している。同様に27行目では、

Sample005n.MySpace2.MyClass1.MyMethod1()

と記述する代わりに、

b.MyMethod1()

と短く記述するだけで済んでいる。

 この機能は、普通に記述すると長くなる指定を、短く読みやすくするために使うことができる。特に、同じクラス名などが存在する場合に、適切な別名を用意するために使用すると、読みやすいプログラム・コードを記述するために利用できるだろう。

次回予告

 次回、「名前空間とImports文(後編) 」では、クラス・ライブラリを利用する場合の注意点など、さらに詳しく名前空間とImports文について見ていく予定だ。End of Article


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第17回 名前空間とImports文(前編)
    1.名前空間の効能
  2.デフォルトの名前空間を指定するImports文
 
「プロフェッショナル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 記事ランキング

本日 月間