Freigeben über


Angeben von vollqualifizierten Typnamen

Sie müssen Typnamen angeben, um gültige Eingaben für verschiedene Spiegelungsoperationen zu ermöglichen. Ein vollqualifizierter Typname besteht aus einer Assemblynamenspezifikation, einer Namespacespezifikation und einem Typnamen. Typnamenspezifikationen werden von Methoden wie Type.GetType, Module.GetType, ModuleBuilder.GetType und Assembly.GetType verwendet.

Grammatik für Typnamen

Die Grammatik definiert die Syntax der formalen Sprachen. In der folgenden Tabelle sind lexikalische Regeln aufgeführt, die beschreiben, wie eine gültige Eingabe erkannt wird. Terminals (Elemente, die nicht weiter reduzierbar sind) werden in allen Großbuchstaben angezeigt. Nichtterminale (diejenigen Elemente, die noch weiter reduziert werden können) werden in Groß- und Kleinbuchstaben oder durch Zeichenfolgen in einfachen Anführungszeichen dargestellt. Dabei ist das einfache Anführungszeichen (') nicht Teil der Syntax. Das Pipe-Zeichen (|) bezeichnet Regeln mit Unterregeln.

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
	;

Angeben von Sonderzeichen

In einem Typnamen ist IDENTIFIER jeder gültige Name, der durch die Regeln der Sprache vorgegeben wird.

Verwenden Sie den umgekehrten Schrägstrich (\) als Escapezeichen, um die folgenden Token abzutrennen, die als Teil von IDENTIFIER verwendet werden.

Zeichen Bedeutung
\, Assemblytrennzeichen
\+ Trennzeichen für geschachtelte Typen
\& Verweistyp.
\* Zeigertyp.
\[ Arraydimensionstrennzeichen
\] Arraydimensionstrennzeichen
\. Verwenden Sie den umgekehrten Schrägstrich nur dann vor einem Punkt, wenn der Punkt in einer Arrayspezifikation verwendet wird. Punkte in NamespaceSpec akzeptieren keine umgekehrten Schrägstriche.
\\ Bei Bedarf kann der umgekehrte Schrägstrich als Zeichenfolgenliteral verwendet werden.

In allen TypeSpec-Komponenten mit Ausnahme von AssemblyNameSpec sind Leerzeichen relevant. In der AssemblyNameSpec sind Leerzeichen vor dem Trennzeichen ',' relevant, aber Leerzeichen nach dem Trennzeichen ',' werden ignoriert.

Reflektionsklassen, wie z.B Type.FullName, geben den beschädigten Namen zurück, damit der zurückgegebene Name in einem Aufruf von GetType verwendet werden kann, wie in MyType.GetType(myType.FullName).

Der vollqualifizierte Name für einen Typ kann z. B. sein Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly.

Wenn der Namespace lautet Ozzy.Out+Back, muss dem Pluszeichen ein umgekehrter Schrägstrich vorangestellt werden. Andernfalls interpretiert der Parser dieses als geschachteltes Trennzeichen. Die Reflektion gibt diese Zeichenfolge als Ozzy.Out\+Back.Kangaroo+Wallaby,MyAssembly aus.

Angeben von Assemblynamen

Eine Assemblynamenspezifikation muss mindestens den wörtlichen Namen (IDENTIFIER) der Assembly enthalten. Auf den IDENTIFIER kann eine durch Kommas getrennte Liste von Eigenschaft/Wert-Paaren folgen, wie in der folgenden Tabelle beschrieben. Das Benennen von IDENTIFIER sollte die Regeln für das Benennen von Dateien einhalten. Beim IDENTIFIER wird Groß- und Kleinschreibung beachtet.

Eigenschaftsname BESCHREIBUNG Zulässige Werte
Version Assembly-Versionsnummer Major.Minor.Build.Revision, wobei Major, Minor, Build und Revision ganze Zahlen zwischen 0 und 65535 einschließlich sind.
PublicKey Vollständiger öffentlicher Schlüssel Zeichenfolgenwert des vollständigen öffentlichen Schlüssels im Hexadezimalformat. Geben Sie einen Nullverweis (Nothing in Visual Basic) an, um explizit eine private Assembly anzugeben.
PublicKeyToken Öffentliches Schlüsseltoken (8-Byte-Hash des vollständigen öffentlichen Schlüssels) Zeichenfolgenwert des öffentlichen Schlüsseltokens im Hexadezimalformat. Geben Sie einen Nullverweis (Nothing in Visual Basic) an, um explizit eine private Assembly anzugeben.
Kultur Versammlungskultur Kultur der Assembly im Format RFC-1766 oder auch „neutral“ bei sprachunabhängigen (nicht Satelliten) Assemblys.
Benutzerdefiniert Benutzerdefiniertes binäres großes Objekt (BLOB). Dies wird derzeit nur in Assemblys verwendet, die vom Native Image Generator (Ngen) generiert werden. Benutzerdefinierte Zeichenfolge, die vom Tool "Native Image Generator" verwendet wird, um den Assemblycache zu benachrichtigen, dass die installierte Assembly ein systemeigenes Image ist und daher im nativen Imagecache installiert werden soll. Dies wird auch als ZAP-Zeichenfolge bezeichnet.

Das folgende Beispiel zeigt einen AssemblyName für eine einfach benannte Assembly mit Standardkultur.

com.microsoft.crypto, Culture=""

In folgendem Beispiel wird einen vollständig angegebenen Verweis auf eine Assembly mit starkem Namen mit der Kultur „en“ dargestellt.

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

In folgenden Beispielen wird jeweils ein teilweise angegebenen Assemblyname dargestellt, der entweder von einer stark oder einfach benannten Assembly erfüllt werden kann.

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

Die folgenden Beispiele zeigen jeweils einen teilweise angegebenen Assemblyname, der durch eine einfach benannte Assembly erfüllt werden muss.

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

In folgenden Beispielen wird jeweils ein teilweise angegebenen Assemblyname dargestellt, der von einer stark benannten Assembly erfüllt werden muss.

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

Generische Typen angeben

SimpleTypeSpec'NUMBER stellt einen offenen generischen Typ mit 1 bis n generischen Typparametern dar. Wenn Sie z. B. einen Verweis auf den geöffneten generischen Typ List<T> oder den geschlossenen generischen Typ List<String>abrufen möchten, verwenden Sie " Type.GetType("System.Collections.Generic.List`1") So rufen Sie einen Verweis auf den generischen Typ Dictionary<TKey,TValue>ab," verwenden Sie Type.GetType("System.Collections.Generic.Dictionary`2").

Angeben von Zeigern

SimpleTypeSpec* stellt einen nicht verwalteten Zeiger dar. Wenn Sie beispielsweise einen Zeiger zum Eingeben von MyType abrufen möchten, verwenden Sie Type.GetType("MyType*"). Um einen Zeiger auf den Typ „MyType“ zu erhalten, verwenden Sie Type.GetType("MyType**").

Verweise angeben

SimpleTypeSpec & stellt einen verwalteten Zeiger oder Verweis dar. Um z. B. einen Verweis auf den Typ MyType abzurufen, verwenden Sie Type.GetType("MyType &"). Im Gegensatz zu Zeigern sind Verweise auf eine Ebene beschränkt.

Angeben von Arrays

In der BNF-Grammatik gilt ReflectionEmitDimension nur für unvollständige Typdefinitionen, die mithilfe ModuleBuilder.GetTypeabgerufen werden. Unvollständige Typdefinitionen sind TypeBuilder Objekte, die mit System.Reflection.Emit konstruiert wurden, bei denen jedoch TypeBuilder.CreateType nicht aufgerufen wurde. ReflectionDimension kann verwendet werden, um eine beliebige Typdefinition abzurufen, die abgeschlossen wurde, d. h. einen Typ, der geladen wurde.

Auf Arrays wird in der Reflektion zugegriffen, indem der Rang des Arrays angegeben wird:

  • Type.GetType("MyArray[]") gibt ein eindimensionales Array mit der unteren Grenze 0 zurück.
  • Type.GetType("MyArray[*]") erhält ein eindimensionales Array mit unbekannter unterer Grenze.
  • Type.GetType("MyArray[][]") ruft das Array eines zweidimensionalen Arrays ab.
  • Type.GetType("MyArray[*,*]") und Type.GetType("MyArray[,]") ruft ein rechteckiges zweidimensionales Array mit unbekannten Untergrenzen ab.

Aus der Sicht der Runtime MyArray[] != MyArray[*], aber für mehrdimensionale Arrays sind die beiden Notationen gleich. Das heißt, Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") wird als wahr ausgewertet.

ModuleBuilder.GetType gibt für MyArray[0..5]ein eindimensionales Array mit der Größe 6 und der unteren Grenze 0 an. MyArray[4…] gibt ein Eindimensionsarray mit unbekannter Größe und eine untere Grenze von 4 an.

Siehe auch