Sdílet prostřednictvím


Zadání plně kvalifikovaných názvů typů

Je nutné zadat názvy typů, aby se zajistil platný vstup pro různé reflexní operace. Plně kvalifikovaný název typu se skládá ze specifikace názvu sestavení, specifikace oboru názvů a názvu typu. Specifikace názvů typů se používají metodami, jako jsou Type.GetType, Module.GetType, ModuleBuilder.GetType a Assembly.GetType.

Gramatika pro názvy typů

Gramatika definuje syntaxi formálních jazyků. Následující tabulka uvádí lexikální pravidla, která popisují, jak rozpoznat platný vstup. Terminály (ty prvky, které nejsou dále redukovatelné) jsou zobrazeny velkými písmeny. Neterminály (ty prvky, které jsou dále redukci schopné) jsou zobrazeny ve smíšené velikosti písmen nebo v řetězcích s jednoduchými uvozovkami, ale jednoduché uvozovky (') nejsou součástí samotné syntaxe. Znak svislé čáry (|) označuje pravidla, která mají podpravidla.

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
	;

Zadání speciálních znaků

V názvu typu je identifikátor libovolný platný název určený pravidly jazyka.

Zpětné lomítko (\) použijte jako escape znak k oddělení následujících tokenů, pokud jsou součástí identifikátoru.

Žeton Význam
\, Oddělovač sestavování.
\+ Oddělovač vnořených typů
\& Typ odkazu.
\* Typ ukazatele
\[ Oddělovač rozměrů pole
\] Oddělovač rozměrů pole
\. Zpětné lomítko před tečkou použijte pouze v případě, že se tečka používá ve specifikaci pole. Tečky ve NamespaceSpec nepoužívají zpětné lomítko.
\\ Zpětné lomítko používejte v případě potřeby jako doslovný řetězec.

Ve všech komponentách TypeSpec s výjimkou AssemblyNameSpec jsou mezery relevantní. V assemblyNameSpec jsou mezery před oddělovačem ',' relevantní, ale mezery za oddělovačem ', jsou ignorovány.

Třídy reflexe, jako například Type.FullName, vrací zkomolený název, aby jej bylo možné použít ve volání GetType, jako v MyType.GetType(myType.FullName).

Například plně kvalifikovaný název pro typ může být Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Pokud by měl Ozzy.Out+Back obor názvů, musí před znaménkem plus předcházet zpětné lomítko. V opačném případě by ho analyzátor interpretoval jako oddělovač vnoření. Reflexe vygeneruje tento řetězec jako Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

Zadání názvů sestavení

Minimální informace vyžadované ve specifikaci názvu sestavení jsou textovým názvem (IDENTIFIER) sestavení. Identifikátor můžete sledovat čárkami odděleným seznamem párů vlastností/hodnot, jak je popsáno v následující tabulce. Pojmenování identifikátorů by mělo dodržovat pravidla pro pojmenování souborů. Identifikátor není citlivý na velikost písmen.

Název vlastnosti Popis Povolené hodnoty
Verze Číslo verze sestavení Major.Minor.Build.Revision, kde Major, Minor, Build a Revision jsou celá čísla od 0 do 65535 včetně.
Veřejný klíč Úplný veřejný klíč Řetězcová hodnota úplného veřejného klíče v šestnáctkovém formátu Zadejte nulový odkaz (Nothing v jazyce Visual Basic), který explicitně indikuje privátní sestavení.
PublicKeyToken Token veřejného klíče (8 bajtový hash úplného veřejného klíče) Řetězcová hodnota tokenu veřejného klíče v šestnáctkovém formátu Zadejte nulový odkaz (Nothing v jazyce Visual Basic), který explicitně indikuje privátní sestavení.
Kultura Kultura sestavení Kultura sestavení ve formátu RFC-1766 nebo "neutrální" pro sestavení nezávislá na jazyce (nepodřízená).
na míru Vlastní binární velký objekt (BLOB). Tato funkce se v současné době používá pouze v modulech generovaných nativním generátorem obrazů (Ngen). Vlastní řetězec používaný nástrojem Nativní Generátor Obrazů k upozornění mezipaměti sestavení, že sestava, která se instaluje, je nativní kopie, a tudíž by měla být instalována do mezipaměti nativní kopie. Také se nazývá řetězec zapnutí.

Následující příklad ukazuje AssemblyName pro jednoduše pojmenované sestavení s výchozí kulturou.

com.microsoft.crypto, Culture=""

Následující příklad ukazuje plně definovaný odkaz pro sestavení se silným názvem a kulturou "en".

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

Následující příklady ukazují částečně zadaný AssemblyName, který může být splněn buď silným, nebo jednoduše pojmenovaným sestavením.

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

Následující příklady ukazují částečně zadané AssemblyName, které musí být splněny jednoduše pojmenovaným sestavením.

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

Následující příklady ukazují částečně zadané AssemblyName, které musí být splněny sestavením se silným názvem.

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

Zadání obecných typů

SimpleTypeSpec'NUMBER představuje otevřený obecný typ s parametry obecného typu od 1 do n . Chcete-li například získat odkaz na otevřený obecný typ List<T> nebo uzavřený obecný typ List<String>, použijte Type.GetType("System.Collections.Generic.List`1") k získání odkazu na obecný typ Dictionary<TKey,TValue>, použijte Type.GetType("System.Collections.Generic.Dictionary`2").

Zadání ukazatelů

SimpleTypeSpec* představuje nespravovaný ukazatel. Chcete-li například získat ukazatel na typ MyType, použijte Type.GetType("MyType*"). Chcete-li získat ukazatel na ukazatel pro typ MyType, použijte Type.GetType("MyType**").

Zadání odkazů

SimpleTypeSpec & představuje spravovaný ukazatel nebo odkaz. Chcete-li například získat odkaz na typ MyType, použijte Type.GetType("MyType &"). Na rozdíl od ukazatelů jsou odkazy omezené na jednu úroveň.

Zadání polí

V BNF Grammar, ReflectionEmitDimension platí pouze pro neúplné definice typu načtené pomocí ModuleBuilder.GetType. Neúplné definice typu jsou TypeBuilder objekty vytvořené pomocí System.Reflection.Emit, na které nebylo použito TypeBuilder.CreateType. ReflectionDimension lze použít k načtení jakékoli definice typu, která již byla dokončena, to jest typu, který byl načten.

Pole jsou přístupná v reflexi zadáním pořadí pole:

  • Type.GetType("MyArray[]") získá pole s jednou dimenzí s dolní mezí 0.
  • Type.GetType("MyArray[*]") získá pole s jednou dimenzí s neznámou dolní mezí.
  • Type.GetType("MyArray[][]") získá pole dvourozměrných polí.
  • Type.GetType("MyArray[*,*]") a Type.GetType("MyArray[,]") získá obdélníkové dvojrozměrné pole s neznámými dolními hranicemi.

Z pohledu modulu runtime, MyArray[] != MyArray[*], ale u multidimenzionálních polí jsou dvě notace rovnocenné. To znamená, že Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") se vyhodnotí jako true.

ModuleBuilder.GetType označuje jednorozměrné pole MyArray[0..5] s velikostí 6, dolní mez 0. MyArray[4…] označuje pole s jednou dimenzí s neznámou velikostí a dolní mez 4.

Viz také