さまざまなリフレクション操作に対して有効な入力を行うには、型名を指定する必要があります。 完全修飾型名は、アセンブリ名の指定、名前空間の指定、および型名で構成されます。 型名の仕様は、 Type.GetType、 Module.GetType、 ModuleBuilder.GetType、 Assembly.GetTypeなどのメソッドで使用されます。
型名の文法
文法では、正式な言語の構文を定義します。 次の表に、有効な入力を認識する方法を説明する字句規則を示します。 ターミナル (さらに縮小できない要素) は、すべて大文字で表示されます。 非終端 (さらに縮小可能な要素) は、大文字と小文字が混在する文字列または単一引用符で囲まれた文字列で示されますが、単一引用符 (') は構文自体の一部ではありません。 パイプ文字 (|) は、サブルールを持つルールを表します。
TypeSpec
: ReferenceTypeSpec
| SimpleTypeSpec
;
ReferenceTypeSpec
: SimpleTypeSpec '&'
;
SimpleTypeSpec
: PointerTypeSpec
| GenericTypeSpec
| TypeName
;
GenericTypeSpec
: SimpleTypeSpec ` NUMBER
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) です。 識別子は、次の表で説明するように、プロパティと値のペアのコンマ区切りの一覧でフォローできます。 識別子の名前付けは、ファイルの名前付けの規則に従う必要があります。 識別子では大文字と小文字が区別されません。
プロパティ名 | 説明 | 使用できる値 |
---|---|---|
バージョン | アセンブリのバージョン番号 | Major.Minor.Build.Revision。 Major、 Minor、 Build、 Revision は 0 ~ 65535 の整数です。 |
PublicKey | 完全公開キー | 16 進形式の完全公開キーの文字列値。 プライベート アセンブリを明示的に示すには、null 参照 (Visual Basic では Nothing ) を指定します。 |
PublicKeyToken | 公開キー トークン (完全公開キーの 8 バイト ハッシュ) | 公開キー トークンの文字列値 (16 進数形式)。 プライベート アセンブリを明示的に示すには、null 参照 (Visual Basic では Nothing ) を指定します。 |
カルチャ | アセンブリ カルチャ | RFC-1766 形式のアセンブリのカルチャ。言語に依存しない (非サテライト) アセンブリの場合は "ニュートラル" です。 |
カスタム | カスタム バイナリ ラージ オブジェクト (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'NUMBER は、1 から n 個のジェネリック型パラメーターを持つオープン ジェネリック型を表します。 たとえば、開いているジェネリック型 List<T>
または閉じたジェネリック型 List<String>
への参照を取得するには、 Type.GetType("System.Collections.Generic.List`1")
を使用してジェネリック型 Dictionary<TKey,TValue>
への参照を取得するには、 Type.GetType("System.Collections.Generic.Dictionary`2")
を使用します。
ポインターを指定する
SimpleTypeSpec* はアンマネージ ポインターを表します。 たとえば、MyType 型へのポインターを取得するには、 Type.GetType("MyType*")
を使用します。 MyType 型へのポインターへのポインターを取得するには、 Type.GetType("MyType**")
を使用します。
参照を指定する
SimpleTypeSpec > は、マネージド ポインターまたは参照を表します。 たとえば、MyType 型への参照を取得するには、 Type.GetType("MyType &")
を使用します。 ポインターとは異なり、参照は 1 レベルに制限されます。
配列を指定する
BNF 文法では、ReflectionEmitDimension は、 ModuleBuilder.GetTypeを使用して取得された不完全な型定義にのみ適用されます。 不完全な型定義は、System.Reflection.Emitを使用して構築されたオブジェクトTypeBuilder、TypeBuilder.CreateTypeが呼び出されていないオブジェクトです。 ReflectionDimension を使用すると、完了した型定義 、つまり読み込まれた型を取得できます。
配列は、配列のランクを指定することによってリフレクションでアクセスされます。
-
Type.GetType("MyArray[]")
は、下限が 0 の単一次元配列を取得します。 -
Type.GetType("MyArray[*]")
は、下限が不明な単一次元配列を取得します。 -
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 の単一次元配列を示します。
MyArray[4…]
は、不明なサイズと下限 4 の単一次元配列を示します。
こちらも参照ください
.NET