Ange fullständigt kvalificerade typnamn
Du måste ange typnamn för att ha giltiga indata till olika reflektionsåtgärder. Ett fullständigt kvalificerat typnamn består av en sammansättningsnamnspecifikation, en namnområdesspecifikation och ett typnamn. Typnamnsspecifikationer används med metoder som Type.GetType, Module.GetType, ModuleBuilder.GetTypeoch Assembly.GetType.
Grammatik för typnamn
Grammatiken definierar syntaxen för formella språk. I följande tabell visas lexikala regler som beskriver hur du känner igen en giltig indata. Terminaler (de element som inte är mer reproducerbara) visas i alla versaler. Icke-terminaler (de element som är ytterligare redukterbara) visas i blandade eller singly citerade strängar, men det enda citattecknet (') är inte en del av själva syntaxen. Pipe-tecknet (|) anger regler som har underregler.
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
;
Ange specialtecken
I ett typnamn är IDENTIFIERARe ett giltigt namn som bestäms av reglerna för ett språk.
Använd omvänt snedstreck (\) som ett escape-tecken för att separera följande token när de används som en del av IDENTIFIERARe.
Token | Innebörd |
---|---|
\, |
Sammansättningsavgränsare. |
\+ |
Kapslad typavgränsare. |
\& |
Referenstyp. |
\* |
Pekartyp. |
\[ |
Avgränsare för matrisdimension. |
\] |
Avgränsare för matrisdimension. |
\. |
Använd omvänt snedstreck före en period endast om perioden används i en matrisspecifikation. Perioder i NamespaceSpec tar inte omvänt snedstreck. |
\\ |
Omvänt snedstreck när det behövs som en strängliteral. |
I alla TypeSpec-komponenter utom AssemblyNameSpec är blanksteg relevanta. I AssemblyNameSpec är blanksteg före avgränsaren relevanta, men blanksteg efter avgränsaren ignoreras.
Reflektionsklasser, till exempel Type.FullName, returnerar det manglade namnet så att det returnerade namnet kan användas i ett anrop till GetType, som i MyType.GetType(myType.FullName)
.
Till exempel kan det fullständigt kvalificerade namnet för en typ vara Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly
.
Om namnområdet var Ozzy.Out+Back
måste plustecknet föregås av ett omvänt snedstreck. Annars tolkar parsern det som en kapslingsavgränsare. Reflektion genererar den här strängen som Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly
.
Ange sammansättningsnamn
Den minsta information som krävs i en sammansättningsnamnspecifikation är sammansättningens textnamn (IDENTIFIER). Du kan följa identifieraren med en kommaavgränsad lista över egenskaps-/värdepar enligt beskrivningen i följande tabell. NAMNGIVNING AV IDENTIFIERARE bör följa reglerna för filnamngivning. IDENTIFIERAREN är skiftlägeskänslig.
Egenskapsnamn | beskrivning | Tillåtna värden |
---|---|---|
Version: | Versionsnummer för sammansättning | Major.Minor.Build.Revision, där Major, Minor, Build och Revision är heltal mellan 0 och 65535. |
PublicKey | Fullständig offentlig nyckel | Strängvärde för fullständig offentlig nyckel i hexadecimalt format. Ange en null-referens (ingenting i Visual Basic) för att uttryckligen ange en privat sammansättning. |
PublicKeyToken | Offentlig nyckeltoken (8 bytes hash för den fullständiga offentliga nyckeln) | Strängvärde för offentlig nyckeltoken i hexadecimalt format. Ange en null-referens (ingenting i Visual Basic) för att uttryckligen ange en privat sammansättning. |
Kultur | Sammansättningskultur | Sammansättningskultur i RFC-1766-format, eller "neutral" för språkoberoende sammansättningar (nonsatellite). |
Egen | Anpassat binärt stort objekt (BLOB). Detta används för närvarande endast i sammansättningar som genereras av Ngen (Native Image Generator). | Anpassad sträng som används av verktyget Inbyggd avbildningsgenerator för att meddela sammansättningscacheminnet att sammansättningen som installeras är en intern avbildning och därför ska installeras i den interna avbildningscacheminnet. Kallas även för en zap-sträng. |
I följande exempel visas ett AssemblyName för en helt enkelt namngiven sammansättning med standardkultur.
com.microsoft.crypto, Culture=""
I följande exempel visas en fullständigt angiven referens för en starkt namngiven sammansättning med kulturen "en".
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
I följande exempel visas ett delvis angivet AssemblyName, som kan uppfyllas av antingen en stark eller en helt enkelt namngiven sammansättning.
com.microsoft.crypto
com.microsoft.crypto, Culture=""
com.microsoft.crypto, Culture=en
I följande exempel visas ett delvis angivet AssemblyName, som måste uppfyllas av en helt enkelt namngiven sammansättning.
com.microsoft.crypto, Culture="", PublicKeyToken=null
com.microsoft.crypto, Culture=en, PublicKeyToken=null
I följande exempel visas ett delvis angivet AssemblyName, som måste uppfyllas av en starkt namngiven sammansättning.
com.microsoft.crypto, Culture="", PublicKeyToken=a5d015c7d5a0b012
com.microsoft.crypto, Culture=en, PublicKeyToken=a5d015c7d5a0b012,
Version=1.0.0.0
Ange allmänna typer
SimpleTypeSpec'NUMBER representerar en öppen allmän typ med parametrar av typen 1 till n . Om du till exempel vill hämta en referens till den öppna generiska typen List<T>
eller den stängda generiska typen List<String>
använder Type.GetType("System.Collections.Generic.List`1")
du För att hämta en referens till den generiska typen Dictionary<TKey,TValue>
använder du Type.GetType("System.Collections.Generic.Dictionary`2")
.
Ange pekare
SimpleTypeSpec* representerar en ohanterad pekare. Om du till exempel vill hämta en pekare för att skriva MyType använder du Type.GetType("MyType*")
. Om du vill hämta en pekare till en pekare för att skriva MyType använder du Type.GetType("MyType**")
.
Ange referenser
SimpleTypeSpec & representerar en hanterad pekare eller referens. Om du till exempel vill hämta en referens för att skriva MyType använder du Type.GetType("MyType &")
. Till skillnad från pekare är referenser begränsade till en nivå.
Ange matriser
I BNF-grammatiken gäller ReflectionEmitDimension endast för ofullständiga typdefinitioner som hämtats med .ModuleBuilder.GetType Ofullständiga typdefinitioner är TypeBuilder objekt som skapas med men System.Reflection.Emit som TypeBuilder.CreateType inte har anropats. ReflectionDimension kan användas för att hämta alla typer av definitioner som har slutförts, dvs. en typ som har lästs in.
Matriser används i reflektion genom att ange matrisens rangordning:
Type.GetType("MyArray[]")
hämtar en matris med en dimension med 0 nedre gräns.Type.GetType("MyArray[*]")
hämtar en matris med en dimension med okänd nedre gräns.Type.GetType("MyArray[][]")
hämtar en tvådimensionell matriss matris.Type.GetType("MyArray[*,*]")
ochType.GetType("MyArray[,]")
hämtar en rektangulär tvådimensionell matris med okända nedre gränser.
Från körningssynpunkt, MyArray[] != MyArray[*]
, men för flerdimensionella matriser är de två notationerna likvärdiga. Det vill: Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]")
utvärderas till sant.
För ModuleBuilder.GetType
anger MyArray[0..5]
en matris med en dimension med storlek 6, lägre gräns 0. MyArray[4…]
anger en matris med en dimension med okänd storlek och lägre gräns 4.