完全限定型名の指定
さまざまなリフレクション操作に対して有効な入力を行うには、型名を指定する必要があります。完全限定型名は、アセンブリ名指定、名前空間指定、および型名で構成されます。型名指定は、Type.GetType、Module.GetType、ModuleBuilder.GetType、Assembly.GetType などのメソッドで使用されます。
型名の Backus-Naur Form 文法
Backus-Naur form (BNF) は、公式言語の構文を定義します。有効な入力がどのように認識されるかを説明する BNF 構文規則の表を次に示します。必須要素 (それ以上省略できない要素) は、すべて英大文字で示します。必須ではない要素 (省略可能な要素) は、大文字と小文字を組み合わせた文字列、または単一引用符で囲んだ文字列で示します。ただし、単一引用符 (') はその構文自体の一部ではありませんパイプ文字 (|) は、サブ規則を持つ規則を表します。
完全限定型名の BNF 文法 |
---|
TypeSpec := ReferenceTypeSpec
| SimpleTypeSpec |
ReferenceTypeSpec := SimpleTypeSpec '&' |
SimpleTypeSpec := PointerTypeSpec
| ArrayTypeSpec | TypeName |
PointerTypeSpec := SimpleTypeSpec '*' |
ArrayTypeSpec := SimpleTypeSpec '[ReflectionDimension]'
| SimpleTypeSpec '[ReflectionEmitDimension]' |
ReflectionDimension := '*'
| ReflectionDimension ',' ReflectionDimension | NOTOKEN |
ReflectionEmitDimension := '*'
| Number '..'Number | Number '...' | ReflectionDimension ',' ReflectionDimension | NOTOKEN |
Number := [0-9]+ |
TypeName := NamespaceTypeName
| NamespaceTypeName ',' AssemblyNameSpec |
NamespaceTypeName := NestedTypeName
| NamespaceSpec '.' NestedTypeName |
NestedTypeName := IDENTIFIER
| NestedTypeName '+' IDENTIFIER |
NamespaceSpec := IDENTIFIER
| NamespaceSpec '.'IDENTIFIER |
AssemblyNameSpec := IDENTIFIER
| IDENTIFIER ',' AssemblyProperties |
AssemblyProperties := AssemblyProperty
| AssemblyProperties ',' AssemblyProperty |
AssemblyProperty := AssemblyPropertyName '=' AssemblyPropertyValue |
特殊文字の指定
型名の IDENTIFIER は、言語の規則によって決定される任意の有効な名前です。
IDENTIFIER の一部として使用される次のトークンを区切るには、エスケープ文字として円記号 (\) を使用します。
トークン | 説明 |
---|---|
\, | アセンブリの区切り記号 |
\+ | 入れ子になった型の区切り記号 |
\& | 参照型 |
\* | ポインタ型 |
\[ | 配列次元の区切り記号 |
\] | 配列次元の区切り記号 |
\. | 配列指定にピリオドが使用されているときだけ、ピリオドの前に円記号を使用します。NamespaceSpec 内のピリオドには、円記号は付けません。 |
\\ | リテラル文字列として使用する円記号 |
AssemblyNameSpec を除くすべての TypeSpec コンポーネントで、スペースに意味があることに注意してください。AssemblyNameSpec では、区切り記号 ',' の前のスペースには意味がありますが、区切り記号 ',' 後のスペースは無視されます。
Type.FullName などのリフレクション クラスは、分解された名前を返すため、返された名前を MyType.GetType(myType.FullName)
のように、GetType の呼び出しで使用できます。
たとえば、型の完全限定名を Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly
のように記述できます。
名前空間が Ozzy.Out+Back
の場合は、プラス記号の前に円記号が必要です。円記号がない場合、パーサーは、プラス記号を入れ子になった区切り記号と解釈します。リフレクションでは、この文字列は、Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly
として出力されます。
アセンブリ名の指定
アセンブリ名指定で最小限必要な情報は、文字列のアセンブリ名 (IDENTIFIER) です。次の表で示すように、IDENTIFIER の後に、プロパティと値のペアをコンマで区切ったリストを記述できます。IDENTIFIER の名前付けは、ファイル命名規則に従って行う必要があります。IDENTIFIER は、大文字/小文字を区別しません。
プロパティ名 | 説明 | 使用できる値 |
---|---|---|
Version | アセンブリのバージョン番号 | Major.Minor.Build.Revision。ここで、Major、Minor、Build、および Revision は 0 ~ 65535 までの整数を表します。 |
PublicKey | 完全公開キー。 | 16 進形式の文字列値の完全公開キー。プライベート アセンブリを明示的に示すには、null 参照 (Visual Basic では Nothing) を指定します。 |
PublicKeyToken | 公開キー トークン (完全公開キーの 8 バイト ハッシュ)。 | 16 進形式の文字列値の公開キー トークン。プライベート アセンブリを明示的に示すには、null 参照 (Visual Basic では Nothing) を指定します。 |
Culture | アセンブリのカルチャ設定。 | RFC-1766 形式のアセンブリのカルチャ設定。言語に依存しないアセンブリの場合は "neutral"(非サテライト)。 |
Custom | カスタムのバイナリ ラージ オブジェクト (BLOB)。これは、現在はネイティブ イメージ ジェネレータ (Ngen) で生成されたアセンブリだけで使用されています。 | インストールするアセンブリがネイティブ イメージなので、ネイティブ イメージ キャッシュにインストールすることをアセンブリ キャッシュに通知するために、ネイティブ イメージ ジェネレータが使用するカスタム文字列。zap 文字列とも呼ばれます。 |
既定のカルチャ設定を持つ簡易名のアセンブリの AssemblyName の例を次に示します。
com.microsoft.crypto, Culture=""
カルチャ設定 "en" の厳密な名前のアセンブリに対する、完全指定の参照の例を次に示します。
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
厳密または単純な名前のアセンブリで条件を満たすことができる、部分指定の AssemblyName の例を次に示します。
com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en
簡易名のアセンブリで条件を満たす必要がある、部分指定の AssemblyName の例を次に示します。
com.microsoft.crypto, Culture="", PublicKeyToken=null
com.microsoft.crypto, Culture=en, PublicKeyToken=null
厳密な名前のアセンブリで条件を満たす必要がある、部分指定の AssemblyName の例を次に示します。
com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
ポインタの指定
SimpleTypeSpec* は、アンマネージ ポインタを表します。たとえば、MyType 型へのポインタを取得するには、Type.GetType("MyType*")
を使用します。MyType 型へのポインタへのポインタを取得するには、Type.GetType("MyType**")
を使用します。
参照の指定
SimpleTypeSpec & は、マネージ ポインタまたは参照を表します。たとえば、MyType 型への参照を取得するには、Type.GetType("MyType &")
を使用します。ポインタとは異なり、参照は、1 レベルに限定されることに注意してください。
配列の指定
BNF 文法では、ReflectionEmitDimension は、ModuleBuilder.GetType を使用して取得した不完全な型定義だけに適用されます。不完全な型定義は、Reflection.Emit を使用して構築された TypeBuilder オブジェクトのうち、TypeBuilder.CreateType が呼び出されていないオブジェクトです。ReflectionDimension を使用すると、完成した任意の型定義、つまり、読み込まれている型を取得できます。
リフレクションでは、配列のランクを指定することにより、配列にアクセスします。
Type.GetType("MyArray[]")
は、下限 0 の 1 次元配列を取得します。Type.GetType("MyArray[*]")
は、下限が不明の 1 次元配列を取得します。Type.GetType("MyArray[][]")
は、2 次元配列の配列を取得します。Type.GetType("MyArray[*,*]")
およびType.GetType("MyArray[,]")
は、下限が不明の四角形の 2 次元配列を取得します。
ランタイムから見ると、MyArray[] != MyArray[*]
ですが、多次元配列の場合は、この 2 つの表記は同等です。つまり、Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")
は true と評価されます。
ModuleBuilder.GetType では、MyArray[0..5]
は、サイズが 6 で、下限 0 の 1 次元配列を示します。MyArray[4...]
は、サイズが不明で、下限 4 の 1 次元配列を示します。
参照
型情報の表示 | AssemblyName クラス | ModuleBuilder クラス | TypeBuilder クラス | FullName プロパティ | GetType メソッド | AssemblyQualifiedName プロパティ