import ステートメント
更新 : 2007 年 11 月
現在のスクリプトまたは外部ライブラリのどちらかに含まれる名前空間へのアクセスを有効にします。
import namespace
引数
- namespace
必ず指定します。インポートする名前空間の名前。
解説
import ステートメントは、namespace に指定された名前で、グローバル オブジェクトのプロパティを作成します。また、インポートされる名前空間に対応するオブジェクトを含むように、そのプロパティを初期化します。import ステートメントを使用して作成されたプロパティは、代入、削除、および列挙できません。すべての import ステートメントは、スクリプトの開始時に実行されます。
import ステートメントは、名前空間をスクリプトで利用できるようにします。名前空間は、スクリプトで package ステートメントを使用して定義するか、外部アセンブリによって提供されます。名前空間がスクリプト内に見つからないときは、指定したアセンブリ ディレクトリ内で、この名前空間と同じ名前のアセンブリが検索されます。ただし、プログラムがコンパイル中でなく、/autoref オプションがオフでない場合に限ります。たとえば、名前空間 Acme.Widget.Sprocket をインポートし、名前空間が現在のスクリプトで定義されていない場合、JScript は次のアセンブリで名前空間を検索します。
Acme.Widget.Sprocket.dll
Acme.Widget.dll
Acme.dll
インクルードするアセンブリの名前は、明示的に指定できます。/autoref オプションがオフの場合、または名前空間の名前がアセンブリ名に一致しない場合は、明示的に指定する必要があります。コマンド ライン コンパイラは、/reference オプションを使用してアセンブリ名を指定します。ASP.NET では、同じ処理に @ Import および @ Assembly ディレクティブが使用されます。たとえば、アセンブリ mydll.dll を明示的にインクルードするには、コマンド ラインで次のように入力します。
jsc /reference:mydll.dll myprogram.js
ASP.NET ページからアセンブリをインクルードするには、次のように入力します。
<%@ Import namespace = "mydll" %>
<%@ Assembly name = "mydll" %>
コードでクラスが参照されている場合、コンパイラは、最初にローカル スコープでクラスを検索します。一致するクラスが見つからなかった場合、コンパイラはそれぞれの名前空間でクラスを検索します。名前空間の検索は、インポートされた順に行われ、一致する項目が見つかった時点で終了します。クラスの完全限定名を使用すると、クラスの派生元の名前空間を正確に指定できます。
JScript は、入れ子になった名前空間を自動的にインポートしません。各名前空間は、完全限定名前空間を使用してインポートする必要があります。たとえば、Outer という名前空間のクラス、および Outer.Inner という入れ子になった名前空間のクラスにアクセスするには、両方の名前空間をインポートする必要があります。
使用例
次の例では、3 つの簡単なパッケージを定義し、スクリプトに名前空間をインポートします。一般的に、各パッケージは個別のアセンブリに存在し、パッケージ内容を保守および配布できるようになっています。
// Create a simple package containing a class with a single field (Hello).
package Deutschland {
class Greeting {
static var Hello : String = "Guten tag!";
}
};
// Create another simple package containing two classes.
// The class Greeting has the field Hello.
// The class Units has the field distance.
package France {
public class Greeting {
static var Hello : String = "Bonjour!";
}
public class Units {
static var distance : String = "meter";
}
};
// Use another package for more specific information.
package France.Paris {
public class Landmark {
static var Tower : String = "Eiffel Tower";
}
};
// Declare a local class that shadows the imported classes.
class Greeting {
static var Hello : String = "Greetings!";
}
// Import the Deutschland, France, and France.Paris packages.
import Deutschland;
import France;
import France.Paris;
// Access the package members with fully qualified names.
print(Greeting.Hello);
print(France.Greeting.Hello);
print(Deutschland.Greeting.Hello);
print(France.Paris.Landmark.Tower);
// The Units class is not shadowed, so it can be accessed with or without a fully qualified name.
print(Units.distance);
print(France.Units.distance);
このスクリプトの出力は次のようになります。
Greetings!
Bonjour!
Guten tag!
Eiffel Tower
meter
meter