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 schrijfwijzen of enkele aanhalingstekens, maar het enkele aanhalingsteken (') maakt geen deel uit van de syntaxis zelf. Het pijpteken (|) geeft aan dat regels 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 IDENTIFIER elke geldige naam die wordt bepaald door de regels van een taal.

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

Teken Betekenis
\, Assemblagescheid."
\+ Geneste typescheidingsteken.
\& Referentietype.
\* Aanwijzertype.
\[ Scheidingsteken voor arraydimensie.
\] Scheidingsteken voor arraydimensie.
\. Gebruik de backslash voor een punt alleen als de periode wordt gebruikt in een matrixspecificatie. Periodes in NamespaceSpec gebruiken geen backslash.
\\ 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.

Reflectieklassen, zoals Type.FullName, retourneren de vervormde naam zodat deze gebruikt kan worden 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 zou de parser het als een nestscheidingsteken interpreteren. Reflectie geeft deze string terug als Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly.

Assembly-namen specificeren

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

Naam van de eigenschap 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 samenstelling in RFC-1766-indeling of 'neutraal' voor taalonafhankelijke (niet-satelliet) samenstellingen.
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 native afbeelding is en daarom moet worden geïnstalleerd in de cache voor native afbeeldingen. Ook wel een zap-tekenreeks genoemd.

In het volgende voorbeeld ziet u een AssemblyName voor een gewoon benoemde assembly met een 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 gespecificeerd AssemblyName, wat namelijk vervuld kan worden 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 gespecificeerde AssemblyName, waarvoor 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 deels gespecificeerde AssemblyName, die moet worden vervuld 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 van het type MyType wilt krijgen, 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 aanwijzers 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.

Arrays worden benaderd via reflectie door de rang van de array 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.

Voor ModuleBuilder.GetType geeft MyArray[0..5] een eendimensionale array aan met grootte 6 en ondergrens 0. MyArray[4…] geeft een matrix met één dimensie van onbekende grootte en ondergrens 4 aan.

Zie ook