Zadání plně kvalifikovaných názvů typů
Je nutné zadat názvy typů, které mají platný vstup do různých operací reflexe. 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 Type.GetTypejsou , Module.GetType, ModuleBuilder.GetTypea 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 redukovat) jsou zobrazeny ve všech velkých písmenech. Neterminaly (ty prvky, které jsou dále reducible) jsou zobrazeny ve smíšených nebo singly citovaných řetězcích, ale jednoduchá uvozovka (') není součástí samotné syntaxe. Znak svislé roury (|) označuje pravidla, která mají podruly.
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 řídicí znak k oddělení následujících tokenů, pokud se používají jako součást identifikátoru.
Token | Význam |
---|---|
\, |
Oddělovač sestavení. |
\+ |
Oddělovač vnořených typů |
\& |
Typ odkazu. |
\* |
Typ ukazatele |
\[ |
Oddělovač dimenzí pole |
\] |
Oddělovač dimenzí 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 v oboru názvůSpec nepřebírají zpětné lomítko. |
\\ |
Zpětné lomítko v případě potřeby jako řetězcový literál. |
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.
Reflexe ion třídy, jako Type.FullNameje například , vrátí mangled název tak, aby vrácený název lze použít při 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 byl 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 ion tento řetězec vygeneruje 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 nerozlišuje malá a velká písmena.
Název vlastnosti | Popis | Povolené hodnoty |
---|---|---|
Verze | Číslo verze sestavení | Major.Minor.Build.Revision, kde hlavní, vedlejší, sestavení a revize jsou celá čísla od 0 do 65535 včetně. |
Publickey | Ú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 (hodnota hash 8 bajtů ú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í. |
Kultury | Jazyková verze sestavení | Jazyková verze sestavení ve formátu RFC-1766 nebo neutrální pro sestavení nezávislá na jazyce (nesatellite). |
Vlastní | Vlastní binární velký objekt (BLOB). Tato funkce se v současné době používá pouze v sestaveních generovaných generátorem nativních bitových verzí (Ngen). | Vlastní řetězec používaný nástrojem Generátor nativních imagí k upozornění mezipaměti sestavení, že sestavení, které je nainstalováno, je nativní bitová kopie, a proto se má nainstalovat do mezipaměti nativní bitové kopie. Označuje se také jako řetězec zap. |
Následující příklad ukazuje AssemblyName pro jednoduše pojmenované sestavení s výchozí jazykovou verzí.
com.microsoft.crypto, Culture=""
Následující příklad ukazuje plně zadaný odkaz pro sestavení se silným názvem s jazykovou verzí "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 Reflexe ionEmitDimension 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 , které TypeBuilder.CreateType však nebyly volány. Reflexe ionDimension lze použít k načtení jakékoli definice typu, která byla dokončena, to znamená typ, 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á dvojrozměrné pole.Type.GetType("MyArray[*,*]")
aType.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 ekvivalentní. To znamená, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")
že se vyhodnotí jako true.
MyArray[0..5]
Označuje ModuleBuilder.GetType
jednokódovou matici s velikostí 6, dolní mez 0. MyArray[4…]
označuje pole s jednou dimenzí s neznámou velikostí a dolní mez 4.