完全修飾型名の指定

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

                                        |     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 は、大文字/小文字を区別しません。

プロパティ名

説明

使用できる値

バージョン

アセンブリのバージョン番号

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

Type.FullName

Type.GetType

Type.AssemblyQualifiedName

概念

型情報の表示