Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Meg kell adnia a típusneveket, hogy érvényes bemenettel rendelkezzenek a különböző tükröződési műveletekhez. A teljes típusnév egy szerelvénynév-specifikációból, egy névtér-specifikációból és egy típusnévből áll. A típusnév-specifikációkat olyan metódusok használják, mint a Type.GetType, Module.GetType, ModuleBuilder.GetTypeés Assembly.GetType.
Típusnevek nyelvtana
A nyelvtan a formális nyelvek szintaxisát határozza meg. Az alábbi táblázat az érvényes bemenetek felismerését leíró lexikális szabályokat sorolja fel. A terminálok (azok az elemek, amelyek nem vonhatók vissza) minden nagybetűben megjelennek. A nemterminális elemek (az olyan elemek, amelyek tovább bonthatók) vegyes kis- és nagybetűvel vagy egyszeres idézőjelbe tett karakterláncokban jelennek meg, de az egyszeres idézőjel (') nem része annak a szintaxisnak. A csőkaraktér (|) az alszabályokkal rendelkező szabályokat jelöli.
TypeSpec
: ReferenceTypeSpec
| SimpleTypeSpec
;
ReferenceTypeSpec
: SimpleTypeSpec '&'
;
SimpleTypeSpec
: PointerTypeSpec
| GenericTypeSpec
| TypeName
;
GenericTypeSpec
: SimpleTypeSpec ` NUMBER
| SimpleTypeSpec ` NUMBER '[' GenericArguments ']'
;
GenericArguments
: GenericArgument
| GenericArguments ',' GenericArgument
;
GenericArgument
: TypeSpec
| '[' TypeSpec ']'
;
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
;
Speciális karakterek megadása
Egy típusnévben az AZONOSÍTÓ bármely érvényes név, amelyet egy nyelv szabályai határoznak meg.
Használja a fordított perjelet (\) escape karakterként a következő tokenek elkülönítéséhez, ha az azonosító részeként használja.
| Jelző | Értelmezés |
|---|---|
\, |
Szerelvényelválasztó. |
\+ |
Beágyazott típuselválasztó. |
\& |
Hivatkozás típusa. |
\* |
Mutató típusa. |
\[ |
Tömbdimenzió-elválasztó. |
\] |
Tömbdimenzió-elválasztó. |
\. |
Csak akkor használjon visszaperjelet egy pont előtt, ha a pontot tömbspecifikációban használja. A NamespaceSpec pontjai nem veszik figyelembe a fordított perjelet. |
\\ |
Fordított perjel szükség esetén sztringkonstansként. |
A AssemblyNameSpec kivételével minden TypeSpec összetevőben relevánsak a szóközök. A AssemblyNameSpecben a "," elválasztó előtti szóközök relevánsak, de a "," elválasztó utáni szóközök figyelmen kívül lesznek hagyva.
A reflexiós osztályok, mint például Type.FullName, visszaadják a torzított nevet, hogy a visszaadott név felhasználható legyen egy GetType hívásra, ahogy a következőben látható MyType.GetType(myType.FullName).
Előfordulhat például, hogy egy típus Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly teljes neve.
Ha a névtér az volt Ozzy.Out+Back, akkor a pluszjelet fordított perjelnek kell megelőznie. Ellenkező esetben az elemző beágyazási elválasztóként értelmezi. A tükrözés ezt a karakterláncot Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssemblyként bocsátja ki.
Összeállításnevek megadása
A szerelvénynév-specifikációban szükséges minimális információ a szerelvény szöveges neve (azonosítója). Az azonosítót a tulajdonság/érték párok vesszővel tagolt listájával követheti az alábbi táblázatban leírtak szerint. Az azonosító elnevezésének a fájlelnevezésre vonatkozó szabályokat kell követnie. Az azonosító nem érzékeny a kis- és nagybetűkre.
| Tulajdonság megnevezése | Leírás | Engedélyezett értékek |
|---|---|---|
| verzió | Szerelvény verziószáma | Major.Minor.Build.Revision, ahol Major, Minor, Build és Revision 0 és 65535 közötti egész számok. |
| PublicKey | Teljes nyilvános kulcs | A teljes nyilvános kulcs karakterláncértéke hexadecimális formátumban. Adjon meg egy nullhivatkozást (Nothing a Visual Basicben), hogy explicit módon jelezze a privát szerelvényt. |
| PublicKeyToken | Nyilvános kulcs jogkivonata (a teljes nyilvános kulcs 8 bájtos kivonata) | A nyilvános kulcs tokenjének karakterlánc értéke hexadecimális formátumban. Adjon meg egy nullhivatkozást (Nothing a Visual Basicben), hogy explicit módon jelezze a privát szerelvényt. |
| Kultúra | Összeszerelési kultúra | A közgyűlés kultúrája RFC-1766 formátumban, vagy "semleges" a nyelvfüggetlen (nem szatellit) közgyűlések esetében. |
| Egyéni | Egyéni bináris nagyméretű objektum (BLOB). Ez jelenleg csak a natív képgenerátor (Ngen) által létrehozott szerelvényekben használatos. | A Natív képgenerátor eszköz által használt egyéni karaktersor, amely tájékoztatja a szerelvény-gyorsítótárat arról, hogy a telepítés alatt álló szerelvény natív rendszerkép, és ezért a natív rendszerkép-gyorsítótárba kell telepíteni. Más néven zapsztring. |
Az alábbi példában egy Egyszerűen elnevezett, alapértelmezett kultúrával rendelkező szerelvény Szerelvényneve látható.
com.microsoft.crypto, Culture=""
Az alábbi példa egy teljesen meghatározott hivatkozást mutat be egy erősen elnevezett szerelvényhez az "en" kultúrával.
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
Az alábbi példák egy részben megadott AssemblyName-et mutatnak be, amelyet egy erős vagy egyszerűen elnevezett szerelvény is kielégíthet.
com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en
Az alábbi példák egy részben megadott AssemblyName nevet mutatnak be, amelyet egy egyszerűen elnevezett szerelvénynek kell kielégítenie.
com.microsoft.crypto, Culture="", PublicKeyToken=null
com.microsoft.crypto, Culture=en, PublicKeyToken=null
Az alábbi példák egy részben megadott AssemblyName nevet mutatnak be, amelyet egy erősen elnevezett szerelvénynek kell kielégítenie.
com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
Általános típusok megadása
SimpleTypeSpec`NUMBER egy általános típusdefiníciót jelöl 1– n általános típusparaméterrel. Például a nyitott általános típusra List<T>mutató hivatkozás lekéréséhez használja a következőt Type.GetType("System.Collections.Generic.List`1"): A nyitott általános típusra Dictionary<TKey,TValue>mutató hivatkozás lekéréséhez használja a következőt Type.GetType("System.Collections.Generic.Dictionary`2"): .
Egy olyan általános típus megadásához , amelynél a típusparaméterek adott típusokra cserélődnek, fűzze hozzá a típusargumentumokat szögletes zárójelekben a következő aritás után: SimpleTypeSpec`NUMBER[TypeArg1,TypeArg2]. Például, ha szeretne egy hivatkozást kapni List<String>, használja Type.GetType("System.Collections.Generic.List`1[System.String]"). A hivatkozás lekéréséhez használja a(z) Type.GetType("System.Collections.Generic.Dictionary`2[System.String,System.Int32]")Dictionary<String, Int32>-t.
Amikor egy típusargumentum szerelvénynév-minősítéssel rendelkezik, zárja azt önálló szögletes zárójelek közé, hogy megakadályozza a szerelvénynévben lévő vesszők típusargumentum-elválasztóként való félreértelmezését. Például:
"System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib],[System.Int32, System.Private.CoreLib]]"
A zárójelek nélküli típusargumentumok nem tartalmazhatnak szerelvényminősítőt. A szerelvény-minősített és a nem minősített típusargumentumok keveréséhez csak a szerelvény által minősítetteket csomagolja szögletes zárójelek közé:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
A Type.AssemblyQualifiedName tulajdonság egy típus nevét adja vissza az elfogadott formátumban Type.GetType . Segítségével bármilyen létrehozott általános típushoz beszerezhet egy helyesen formázott sztringet. Például a typeof(Dictionary<string, int>).AssemblyQualifiedName visszaadja a teljesen definiált, helyesen kódolt nevet, amelyet a Type.GetType-nek átadhat.
Mutatók megadása
A SimpleTypeSpec* nem felügyelt mutatót jelöl. Ha például a MyType típusra mutató mutatót szeretne lekérni, használja a következőt Type.GetType("MyType*"): . Ahhoz, hogy egy MyType típusú mutatóra mutató mutatót kapjon, használja a Type.GetType("MyType**")-t.
Hivatkozások megadása
A SimpleTypeSpec > egy felügyelt mutatót vagy hivatkozást jelöl. Például a MyType típusra mutató hivatkozás lekéréséhez használja a következőt Type.GetType("MyType &"): . A mutatókkal ellentétben a hivatkozások egy szintre korlátozódnak.
Tömbök megadása
A BNF-nyelvhelyességben a ReflectionEmitDimension csak azokra a hiányos típusdefiníciókra vonatkozik, amelyeket a ModuleBuilder.GetType használatával kértek le. A hiányos típusdefiníciók olyan TypeBuilder objektumok, amelyeket System.Reflection.Emit segítségével hoznak létre, de amelyekre nem hívták meg a TypeBuilder.CreateType-t. A ReflectionDimension használatával lekérheti a befejezett típusdefiníciót, vagyis a betöltött típust.
A tömbök a tömb rangjának megadásával érhetők el tükröződésben:
-
Type.GetType("MyArray[]")egy 0 alsó határral rendelkező egydimenziós tömböt kap. -
Type.GetType("MyArray[*]")egy ismeretlen alsó határral rendelkező egydimenziós tömböt kap. -
Type.GetType("MyArray[][]")egy kétdimenziós tömb tömbjét kapja meg. -
Type.GetType("MyArray[*,*]")ésType.GetType("MyArray[,]")egy téglalap alakú, kétdimenziós tömböt kap ismeretlen alsó határokkal.
Futtatókörnyezeti szempontból azonban MyArray[] != MyArray[*]a többdimenziós tömbök esetében a két jelölés egyenértékű. Vagyis Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")igaz értéket ad.
ModuleBuilder.GetType egy egydimenziós tömböt jelöl, amelynek mérete 6, és az alsó határa 0.
MyArray[4…] ismeretlen méretű és 4-es alsó határú egydimenziós tömböt jelöl.