Delen via


Volledig gekwalificeerde typenamen opgeven

U moet typenamen opgeven om geldige invoer te hebben voor verschillende weerspiegelingsbewerkingen. Een volledig gekwalificeerde typenaam bestaat uit een assemblynaamspecificatie, een naamruimtespecificatie en een typenaam. Typenaamspecificaties worden gebruikt door methoden zoals Type.GetType, Module.GetType, ModuleBuilder.GetTypeen Assembly.GetType.

Grammatica voor typenamen

De grammatica definieert de syntaxis van formele talen. De volgende tabel bevat lexicale regels die beschrijven hoe een geldige invoer moet worden herkend. Terminals (die elementen die niet verder kunnen worden herleid) worden in alle hoofdletters weergegeven. Niet-terminale elementen (die elementen die verder kunnen worden herleid) worden weergegeven in tekenreeksen met gemengde letters of singly-aanhalingstekens, maar de enkele aanhalingsteken (') maakt geen deel uit van de syntaxis zelf. Het sluisteken (|) geeft regels aan die subregels bevatten.

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
	;

Speciale tekens opgeven

In een typenaam is id een geldige naam die wordt bepaald door de regels van een taal.

Gebruik de backslash (\) als escape-teken om de volgende tokens te scheiden wanneer deze worden gebruikt als onderdeel van de id.

Token Betekenis
\, Assemblyscheidingsteken.
\+ Geneste typescheidingsteken.
\& Verwijzingstype.
\* Aanwijzertype.
\[ Scheidingsteken voor matrixdimensie.
\] Scheidingsteken voor matrixdimensie.
\. Gebruik de backslash voor een punt alleen als de periode wordt gebruikt in een matrixspecificatie. Perioden in NamespaceSpec nemen de backslash niet mee.
\\ Backslash indien nodig als letterlijke tekenreeks.

In alle TypeSpec-onderdelen behalve AssemblyNameSpec zijn spaties relevant. In de AssemblyNameSpec zijn spaties vóór het scheidingsteken ',' relevant, maar spaties na het scheidingsteken ',' worden genegeerd.

Weerspiegelingsklassen, zoals Type.FullName, retourneren de mangled-naam, zodat de geretourneerde naam kan worden gebruikt in een aanroep naar GetType, zoals in MyType.GetType(myType.FullName).

De volledig gekwalificeerde naam voor een type kan bijvoorbeeld zijn Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Als de naamruimte was Ozzy.Out+Back, moet het plusteken worden voorafgegaan door een backslash. Anders interpreteert de parser deze als een nestscheidingsteken. Weerspiegeling verzendt deze tekenreeks als Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

Assemblynamen opgeven

De minimale informatie die is vereist in een assemblynaamspecificatie, is de tekstuele naam (ID) van de assembly. U kunt de id volgen door een door komma's gescheiden lijst met eigenschaps-/waardeparen, zoals beschreven in de volgende tabel. Id-naamgeving moet voldoen aan de regels voor bestandsnaamgeving. De ID is niet hoofdlettergevoelig.

Eigenschapsnaam Beschrijving Toegestane waarden
Versie Assembly-versienummer Major.Minor.Build.Revision, waarbij Major, Minor, Build en Revision gehele getallen zijn tussen 0 en 65535 inclusief.
PublicKey Volledige openbare sleutel Tekenreekswaarde van volledige openbare sleutel in hexadecimale indeling. Geef een null-verwijzing (niets in Visual Basic) op om expliciet een privéassembly aan te geven.
PublicKeyToken Openbare-sleuteltoken (hash van 8 bytes van de volledige openbare sleutel) Tekenreekswaarde van een openbare-sleuteltoken in hexadecimale notatie. Geef een null-verwijzing (niets in Visual Basic) op om expliciet een privéassembly aan te geven.
Cultuur Assemblycultuur Cultuur van de assembly in RFC-1766-indeling of 'neutraal' voor taalonafhankelijke (niet-satellite) assembly's.
Aangepast Aangepast binair groot object (BLOB). Dit wordt momenteel alleen gebruikt in assembly's die worden gegenereerd door de Native Image Generator (Ngen). Aangepaste tekenreeks die wordt gebruikt door het hulpprogramma Native Image Generator om de assemblycache op de hoogte te stellen dat de assembly die wordt geïnstalleerd, een systeemeigen installatiekopieën is en daarom moet worden geïnstalleerd in de systeemeigen installatiekopieëncache. Ook wel een zap-tekenreeks genoemd.

In het volgende voorbeeld ziet u een AssemblyName voor een gewoon benoemde assembly met de standaardcultuur.

com.microsoft.crypto, Culture=""

In het volgende voorbeeld ziet u een volledig opgegeven verwijzing voor een sterk benoemde assembly met cultuur 'en'.

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

De volgende voorbeelden tonen elk een gedeeltelijk opgegeven AssemblyName, die kan worden voldaan door een sterke of een eenvoudig benoemde assembly.

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

In de volgende voorbeelden ziet u elk een gedeeltelijk opgegeven AssemblyName, die moet worden voldaan door een eenvoudig benoemde assembly.

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

In de volgende voorbeelden ziet u elk een gedeeltelijk opgegeven AssemblyName, die moet worden voldaan door een sterk benoemde assembly.

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

Algemene typen opgeven

SimpleTypeSpec'NUMBER vertegenwoordigt een open algemeen type met parameters van 1 tot n algemeen type. Als u bijvoorbeeld wilt verwijzen naar het open algemene type List<T> of het gesloten algemene type List<String>, gebruikt Type.GetType("System.Collections.Generic.List`1") u Om een verwijzing naar het algemene type Dictionary<TKey,TValue>op te halen, gebruikt Type.GetType("System.Collections.Generic.Dictionary`2")u .

Aanwijzers opgeven

SimpleTypeSpec* vertegenwoordigt een onbeheerde aanwijzer. Als u bijvoorbeeld een aanwijzer wilt ophalen om MyType te typen, gebruikt u Type.GetType("MyType*"). Als u een aanwijzer naar een aanwijzer wilt krijgen om MyType te typen, gebruikt u Type.GetType("MyType**").

Verwijzingen opgeven

SimpleTypeSpec & vertegenwoordigt een beheerde aanwijzer of verwijzing. Als u bijvoorbeeld een verwijzing wilt ophalen naar het type MyType, gebruikt u Type.GetType("MyType &"). In tegenstelling tot verwijzingen zijn verwijzingen beperkt tot één niveau.

Matrices opgeven

In de BNF Grammar is ReflectionEmitDimension alleen van toepassing op onvolledige typedefinities die zijn opgehaald met behulp van ModuleBuilder.GetType. Onvolledige typedefinities zijn TypeBuilder objecten die zijn samengesteld met behulp van System.Reflection.Emit maar waarvoor TypeBuilder.CreateType geen aangeroepen is. ReflectionDimension kan worden gebruikt om elke typedefinitie op te halen die is voltooid, dat wil gezegd, een type dat is geladen.

Matrices worden weergegeven in weerspiegeling door de positie van de matrix op te geven:

  • Type.GetType("MyArray[]") haalt een matrix met één dimensie op met 0 ondergrens.
  • Type.GetType("MyArray[*]") haalt een matrix met één dimensie op met onbekende ondergrens.
  • Type.GetType("MyArray[][]") haalt de matrix van een tweedimensionale matrix op.
  • Type.GetType("MyArray[*,*]") en Type.GetType("MyArray[,]") haalt een rechthoekige tweedimensionale matrix met onbekende ondergrenzen op.

Vanuit een runtime-oogpunt, MyArray[] != MyArray[*]maar voor multidimensionale matrices zijn de twee notaties equivalent. Dat wil gezegd, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") resulteert in waar.

MyArray[0..5] Hiermee ModuleBuilder.GetTypewordt een matrix met één dimensie met grootte 6, ondergrens 0 aangegeven. MyArray[4…] geeft een matrix met één dimensie van onbekende grootte en ondergrens 4 aan.

Zie ook