Teljesen minősített típusnevek megadása

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[*,*]") és Type.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.

Lásd még