連載

プロフェッショナルVB.NETプログラミング
―― VB 6プログラマーのためのVB.NET入門 ――

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

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

Page1 Page2

 前回では、名前空間の存在意義と、Visual Studio .NETにより設定される暗黙の名前空間、そしてImports文の基本的な使用方法について解説した。今回も引き続き、名前空間に関するトピックについての解説を行う。

ピリオドで区切られた名前空間名

 ピリオド記号(.)は名前空間名とそのほかの名前を区切るために用いられるほか、名前空間名の一部として用いることもできる。例えば、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: #Region " 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
ピリオドで区切られた名前空間名を使用したVB.NETのサンプル・プログラム1

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

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

 このソースの1行目では、Imports文を用いて、「a」というキーワードに、Sample006n.MySpace1という名前空間名の一部を対応づけている。そして、18行目ではこの「a」というキーワードを用いて、

a.MySpace2.MyClass1.MyMethod1()

としてメソッド呼び出しを行っている。名前空間名は、MySpace1.MySpace2なので、この名前の一部だけがImports文による別名定義の対象になっているが、このような記述方法を行っても問題はない。実際、このソースは問題なく実行できる。また、ソース17行目と18行目は機能的に等価である。

C#で記述されたクラス・ライブラリと混在したときの名前空間名の注意

 本項はC#に関する知識が少し必要だが、分からない読者はC#のソースを読み飛ばしても構わない。

 .NET Framework上では、異プログラム言語で記述されたクラス・ライブラリを呼び出すことが容易である。しかし、プログラム言語によって名前空間名の扱いが微妙に違うことに注意が必要である。例えば、同じような機能を持つVB.NETで記述されたクラス・ライブラリと、C#で記述されたクラス・ライブラリがあったとしよう。VB.NETで記述されたクラス・ライブラリは次のような内容だったとする。プロジェクト名はClassLibrary1である。

 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
VB.NETでクラス・ライブラリを記述したサンプル・プログラム2(プロジェクト名はClassLibrary1)

 次にC#で記述されたクラス・ライブラリは次のような内容だったとする。プロジェクト名はClassLibrary2である。

  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: }
C#でクラス・ライブラリを記述したサンプル・プログラム3(プロジェクト名はClassLibrary2)

 以上の2つのクラス・ライブラリのプロジェクトを参照して利用するソース・コードは以下のようになる。

 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
サンプル・プログラム2、3を利用するVB.NETのサンプル・プログラム4

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

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

 見てのとおり、2つのクラス・ライブラリは、ソース上では同じように記述されているように見えるが、呼び出すときのメソッド名のフルネームの記述方法が違っている。VB.NETで記述したクラス・ライブラリを呼び出す場合には、ClassLibrary1というキーワードを含む名前空間名を記述するが、C#で記述したクラス・ライブラリを呼び出す場合には、namespace文で記述したとおりの名前を書くだけでよい。

 この動作の相違は、VB.NETのNamespace文とC#のnamespace文の挙動の相違によって引き起こされるものである。VB.NETのNamespace文は、暗黙のうちに、名前の先頭にプロジェクト名を付加するが、C#のnamespace文はそうではない。クラス・ライブラリの作成や利用のときにはよく注意しよう。


 INDEX
  連載 プロフェッショナルVB.NETプログラミング
  第18回 名前空間とImports文(後編)
  1.ピリオドで区切られた名前空間名
    2.フォームと名前空間
 
「プロフェッショナル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 記事ランキング

本日 月間