完全限定型名の指定

さまざまなリフレクション操作に対して有効な入力を行うには、型名を指定する必要があります。完全限定型名は、アセンブリ名指定、名前空間指定、および型名で構成されます。型名指定は、Type.GetTypeModule.GetTypeModuleBuilder.GetTypeAssembly.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。ここで、MajorMinorBuild、および 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 プロパティ