完全修飾型名の指定Specifying fully qualified type names

多様なリフレクション操作に対して有効な入力の型名を指定する必要があります。You must specify type names to have valid input to various reflection operations. 完全修飾型名は、アセンブリ名の指定、名前空間の指定、および型名で構成されます。A fully qualified type name consists of an assembly name specification, a namespace specification, and a type name. 型名の指定は、Type.GetTypeModule.GetTypeModuleBuilder.GetTypeAssembly.GetType などのメソッドで使用されます。Type name specifications are used by methods such as Type.GetType, Module.GetType, ModuleBuilder.GetType, and Assembly.GetType.

型名の文法Grammar for type names

文法で正式な言語の構文が定義されます。The grammar defines the syntax of formal languages. 次の表は、有効な入力を認識する方法を示す構文規則の一覧です。The following table lists lexical rules that describe how to recognize a valid input. 終端要素 (これ以上は単純化できない要素) はすべて大文字で記載しています。Terminals (those elements that are not further reducible) are shown in all uppercase letters. 非終端要素 (これ以上単純化することができる要素) は、大文字と小文字の混在、または単一引用符で囲まれた文字列で記載していますが、単一引用符 (') 自体は構文の一部ではありません。Nonterminals (those elements that are further reducible) are shown in mixed-case or singly quoted strings, but the single quote (') is not a part of the syntax itself. パイプ文字 (|) は、サブ規則がある規則を示します。The pipe character (|) denotes rules that have subrules.

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
    ;

特殊文字の指定Specifying special characters

型名の IDENTIFIER は、言語の規則で決められた任意の有効な名前です。In a type name, IDENTIFIER is any valid name determined by the rules of a language.

IDENTIFIER の一部として使用する場合、次のトークンを区切るには、エスケープ文字としてバックスラッシュ (\) を使用します。Use the backslash (\) as an escape character to separate the following tokens when used as part of IDENTIFIER.

トークンToken 説明Meaning
\、\, アセンブリの区切り文字。Assembly separator.
\+ 入れ子にされた型の区切り文字。Nested type separator.
\& 参照型。Reference type.
\* ポインター型。Pointer type.
\[\[ 配列次元の区切り文字。Array dimension delimiter.
\]\] 配列次元の区切り文字。Array dimension delimiter.
\。\. 配列の指定内にピリオドを使用する場合にのみ、ピリオドの前にバックスラッシュを使用します。Use the backslash before a period only if the period is used in an array specification. NamespaceSpec 内のピリオドにはバックスラッシュを使用できません。Periods in NamespaceSpec do not take the backslash.
\|文字列リテラルとして必要な場合のバックスラッシュ。\|Backslash when needed as a string literal.

AssemblyNameSpec を除くすべての TypeSpec コンポーネントで、スペースは関係があります。Note that in all TypeSpec components except AssemblyNameSpec, spaces are relevant. AssemblyNameSpec の場合、',' 区切り文字の前にあるスペースは関係がありますが、',' の後のスペースは無視されます。In the AssemblyNameSpec, spaces before the ',' separator are relevant, but spaces after the ',' separator are ignored.

Type.FullName などのリフレクション クラスは、MyType.GetType(myType.FullName) と同様に返される名前を GetType の呼び出しに使用できるように、壊れた名前を返します。Reflection classes, such as Type.FullName, return the mangled name so that the returned name can be used in a call to GetType, as in MyType.GetType(myType.FullName).

たとえば、型の完全修飾型名が Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly だとします。For example, the fully qualified name for a type might be Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

名前空間が Ozzy.Out+Back の場合、プラス記号の前にはバックスラッシュを指定する必要があります。If the namespace were Ozzy.Out+Back, then the plus sign must be preceded by a backslash. そうしないと、パーサーから入れ子の区切り文字として解釈されます。Otherwise, the parser would interpret it as a nesting separator. リフレクションからこの文字列は Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly として出力されます。Reflection emits this string as Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

アセンブリ名の指定Specifying assembly names

アセンブリ名の指定に必要な最小限の情報は、アセンブリのテキスト形式の名前 (IDENTIFIER) です。The minimum information required in an assembly name specification is the textual name (IDENTIFIER) of the assembly. 次の表で説明されているプロパティ/値ペアのコンマ区切りの一覧で、IDENTIFIER に従うことができます。You can follow the IDENTIFIER by a comma-separated list of property/value pairs as described in the following table. IDENTIFIER の名前付けは、ファイルの名前付け規則に従う必要があります。IDENTIFIER naming should follow the rules for file naming. IDENTIFIER は大文字と小文字が区別されません。The IDENTIFIER is case-insensitive.

プロパティ名Property name 説明Description 使用できる値Allowable values
VersionVersion アセンブリのバージョン番号Assembly version number Major.Minor.Build.RevisionMajorMinorBuildRevision は 0 以上 65535 以下の整数です。Major.Minor.Build.Revision, where Major, Minor, Build, and Revision are integers between 0 and 65535 inclusive.
PublicKeyPublicKey 完全な公開鍵Full public key 16 進数形式の完全な公開鍵の文字列値。String value of full public key in hexadecimal format. プライベート アセンブリを明示的に指定するには、null 参照を指定します (Visual Basic では Nothing)。Specify a null reference (Nothing in Visual Basic) to explicitly indicate a private assembly.
PublicKeyTokenPublicKeyToken 公開鍵トークン (完全な公開鍵の 8 バイト ハッシュ)Public key token (8-byte hash of the full public key) 16 進数形式の公開鍵トークンの文字列値。String value of public key token in hexadecimal format. プライベート アセンブリを明示的に指定するには、null 参照を指定します (Visual Basic では Nothing)。Specify a null reference (Nothing in Visual Basic) to explicitly indicate a private assembly.
カルチャCulture アセンブリのカルチャAssembly culture RFC 1766 形式のアセンブリのカルチャ。言語に依存しない (非サテライト) アセンブリの場合は "neutral"。Culture of the assembly in RFC-1766 format, or "neutral" for language-independent (nonsatellite) assemblies.
カスタムCustom カスタム バイナリ ラージ オブジェクト (BLOB)。Custom binary large object (BLOB). 現在、 Native Image Generator (Ngen) で生成されたアセンブリでのみ使用されています。This is currently used only in assemblies generated by the Native Image Generator (Ngen). アセンブリがインストールされていることをアセンブリ キャッシュに通知するために Native Image Generator ツールに使用されているカスタム文字列は、ネイティブ イメージです。そのため、ネイティブ イメージ キャッシュにインストールされます。Custom string used by the Native Image Generator tool to notify the assembly cache that the assembly being installed is a native image, and is therefore to be installed in the native image cache. zap 文字列とも呼ばれます。Also called a zap string.

次に、カルチャが既定で単純な名前のアセンブリのAssemblyName の例を示します。The following example shows an AssemblyName for a simply named assembly with default culture.

com.microsoft.crypto, Culture=""

次に、カルチャが "en" の厳密な名前のアセンブリに対する完全に指定された参照の例を示します。The following example shows a fully specified reference for a strongly named assembly with culture "en".

com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
    Version=1.0.0.0

次の各例は、部分的に指定された AssemblyName を示しています。これは厳密な名前または単純な名前のアセンブリで満たすことができます。The following examples each show a partially specified AssemblyName, which can be satisfied by either a strong or a simply named assembly.

com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en

次の各例は、部分的に指定された AssemblyName を示しています。これは簡易な名前のアセンブリで満たす必要があります。The following examples each show a partially specified AssemblyName, which must be satisfied by a simply named assembly.

com.microsoft.crypto, Culture="", PublicKeyToken=null
com.microsoft.crypto, Culture=en, PublicKeyToken=null

次の各例は、部分的に指定された AssemblyName を示しています。これは厳密な名前のアセンブリで満たす必要があります。The following examples each show a partially specified AssemblyName, which must be satisfied by a strongly named assembly.

com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
    Version=1.0.0.0

ジェネリック型の指定Specifying generic types

SimpleTypeSpec`NUMBER は、ジェネリック型パラメーター が 1 ~ n であるオープン ジェネリック型を表します。SimpleTypeSpec`NUMBER represents an open generic type with from 1 to n generic type parameters. たとえば、オープン ジェネリック型 List<T> またはクローズ ジェネリック型 List<String> に対する参照を取得するには、Type.GetType("System.Collections.Generic.List`1") を使用します。ジェネリック型 Dictionary<TKey,TValue> に対する参照を取得するには、Type.GetType("System.Collections.Generic.Dictionary`2") を使用します。For example, to get reference to the open generic type List<T> or the closed generic type List<String>, use Type.GetType("System.Collections.Generic.List`1") To get a reference to the generic type Dictionary<TKey,TValue>, use Type.GetType("System.Collections.Generic.Dictionary`2").

ポインターの指定Specifying pointers

SimpleTypeSpec* はアンマネージ ポインターを示します。SimpleTypeSpec* represents an unmanaged pointer. たとえば、型 MyType に対するポインターを取得するには、Type.GetType("MyType*") を使用します。For example, to get a pointer to type MyType, use Type.GetType("MyType*"). 型 MyType のポインターに対するポインターを取得するには、Type.GetType("MyType**") を使用します。To get a pointer to a pointer to type MyType, use Type.GetType("MyType**").

参照の指定Specifying references

SimpleTypeSpec & はマネージド ポインターまたは参照を表します。SimpleTypeSpec & represents a managed pointer or reference. たとえば、型 MyType に対する参照を取得するには、Type.GetType("MyType &") を使用します。For example, to get a reference to type MyType, use Type.GetType("MyType &"). ポインターとは異なり、参照は 1 つのレベルに制限されます。Note that unlike pointers, references are limited to one level.

配列の指定Specifying arrays

BNF 文法では、ReflectionEmitDimension は ModuleBuilder.GetType を使用して取得された不完全な型定義にのみ適用されます。In the BNF Grammar, ReflectionEmitDimension only applies to incomplete type definitions retrieved using ModuleBuilder.GetType. 不完全な型定義とは、TypeBuilder.CreateType で呼び出されていない、System.Reflection.Emit を使用して構築された TypeBuilder オブジェクトです。Incomplete type definitions are TypeBuilder objects constructed using System.Reflection.Emit but on which TypeBuilder.CreateType has not been called. ReflectionDimension を使用して、完了している任意の型定義 (読み込まれている型) を取得できます。ReflectionDimension can be used to retrieve any type definition that has been completed, that is, a type that has been loaded.

配列のランクを指定して、リフレクションで配列にアクセスします。Arrays are accessed in reflection by specifying the rank of the array:

  • Type.GetType("MyArray[]") は 0 個の下限がある 1 次元配列を取得します。Type.GetType("MyArray[]") gets a single-dimension array with 0 lower bound.

  • Type.GetType("MyArray[*]") は不明な下限がある 1 次元配列を取得します。Type.GetType("MyArray[*]") gets a single-dimension array with unknown lower bound.

  • Type.GetType("MyArray[][]") は 2 次元配列の配列です。Type.GetType("MyArray[][]") gets a two-dimensional array's array.

  • Type.GetType("MyArray[*,*]")Type.GetType("MyArray[,]") は、下限が不明な四角形の 2 次元配列を取得します。Type.GetType("MyArray[*,*]") and Type.GetType("MyArray[,]") gets a rectangular two-dimensional array with unknown lower bounds.

ランタイムの観点からは、多次元配列を別にすれば、MyArray[] != MyArray[*] の 2 つの表記は同等です。Note that from a runtime point of view, MyArray[] != MyArray[*], but for multidimensional arrays, the two notations are equivalent. つまり、Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")true と評価されます。That is, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") evaluates to true.

ModuleBuilder.GetType の場合、MyArray[0..5] はサイズが 6 で下限が 0 の 1 次元配列です。For ModuleBuilder.GetType, MyArray[0..5] indicates a single-dimension array with size 6, lower bound 0. MyArray[4…] は、不明なサイズで下限が 4 の 1 次元配列です。MyArray[4…] indicates a single-dimension array of unknown size and lower bound 4.

関連項目See also