Angeben von vollqualifizierten Typnamen

Sie müssen Typnamen angeben, um eine gültige Eingabe für verschiedene Reflektionsvorgänge zu haben. Ein vollqualifizierter Typname besteht aus der Angabe eines Assemblynamens, eines Namespaces und eines Typnamens. Angaben von Typnamen werden von Methoden wie Type.GetType, Module.GetType, ModuleBuilder.GetType und Assembly.GetType verwendet.

Grammatik für Typnamen

Die Grammatik definiert die Syntax formaler Sprachen. In der folgenden Tabelle werden lexikalische Regeln aufgelistet, die angeben, wie Sie eine gültige Eingabe erkennen können. Terminale (diejenigen Elemente, die nicht weiter reduziert werden können) werden in Großbuchstaben dargestellt. 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 Pipezeichen (|) kennzeichnet 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.

Token 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 außer AssemblyNameSpec sind Leerzeichen relevant. In AssemblyNameSpec sind Leerzeichen vor dem Trennzeichen „,“ (Komma) relevant, aber dahinter werden sie nicht beachtet.

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 eines Typs kann z.B. Ozzy.OutBack.Kangaroo+Wallaby,MyAssembly sein.

Wenn der Namespace z.B. Ozzy.Out+Back ist, muss vor dem Pluszeichen ein umgekehrter Schrägstrich stehen. 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.

Name der Eigenschaft Beschreibung Zulässige Werte
Version Assemblyversionsnummer Major.Minor.Build.Revision, wobei es sich bei Major, Minor, Build und Revision um ganze Zahlen zwischen 0 und einschließlich 65535 handelt
PublicKey Vollständiger öffentlicher Schlüssel Zeichenfolgenwert des vollständigen öffentlichen Schlüssels im Hexadezimalformat. Geben Sie einen NULL-Verweis an (Nothing in Visual Basic), um eine private Assembly explizit zu kennzeichnen.
PublicKeyToken Öffentliches Schlüsseltoken (8-Byte-Hash des vollständigen öffentlichen Schlüssels) Zeichenfolgenwert des öffentlichen Schlüsseltokens im Hexadezimalformat. Geben Sie einen NULL-Verweis an (Nothing in Visual Basic), um eine private Assembly explizit zu kennzeichnen.
Kultur Assemblykultur Kultur der Assembly im Format RFC-1766 oder auch „neutral“ bei sprachunabhängigen (nicht Satelliten) Assemblys.
Benutzerdefiniert Ein benutzerdefiniertes Binary Large Object (BLOB) Dies wird aktuell nur in Assemblys genutzt, die vom Native Image Generator (Ngen) generiert wurden. Benutzerdefinierte Zeichenfolgen, die vom Native Image Generator-Tool verwendet werden, um den Assemblycache zu informieren, das die Assembly, die gerade installiert wird, ein natives Image ist und deshalb im nativen Imagecache installiert werden muss. Dies wird auch als ZAP-Zeichenfolge bezeichnet.

In folgendem Beispiel wird ein Assemblyname für eine einfach benannte Assembly mit einer Standardkultur dargestellt.

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

In folgenden Beispielen wird jeweils ein teilweise angegebenen Assemblyname dargestellt, der von einer einfach benannten 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

Angeben generischer Typen

SimpleTypeSpecNUMBER stellt einen offenen generischen Typ mit 1 bis ngenerischen Typparametern dar. Wenn Sie beispielsweise einen Verweis auf den offenen generischen Typ List<T> oder den geschlossenen generischen Typ List<String> abrufen möchten, verwenden Sie Type.GetType("System.Collections.Generic.List`1"). Wenn Sie einen Verweis auf den generischen Typ Dictionary<TKey,TValue> abrufen möchten, verwenden Sie Type.GetType("System.Collections.Generic.Dictionary`2").

Angeben von Zeigern

SimpleTypeSpec* stellt einen nicht verwalteten Zeiger dar. Um z.B. einen Zeiger auf den Typ „MyType“ zu erhalten, verwenden Sie Type.GetType("MyType*"). Um einen Zeiger auf den Typ „MyType“ zu erhalten, verwenden Sie Type.GetType("MyType**").

Angeben von Verweisen

SimpleTypeSpe & stellt einen nicht verwalteten Zeiger oder Verweis dar. Um z.B. einen Verweis auf den Typ „MyType“ zu erhalten, 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 mit ModuleBuilder.GetType abgerufen wurden. Unvollständige Typdefinitionen sind TypeBuilder-Objekte, die mit System.Reflection.Emit erstellt wurden, auf denen TypeBuilder.CreateType jedoch nicht aufgerufen wurde. ReflectionDimension kann verwendet werden, um jede vollständige Typdefinition abzurufen, d.h. jeder geladene Typ.

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

  • Type.GetType("MyArray[]") ruft ein eindimensionales Array mit der unteren Grenze 0 ab.
  • Type.GetType("MyArray[*]") ruft ein eindimensionales Array mit unbekannter unterer Grenze ab.
  • Type.GetType("MyArray[][]") ruft das Array eines zweidimensionalen Arrays ab.
  • Type.GetType("MyArray[*,*]") und Type.GetType("MyArray[,]") rufen ein rechteckiges zweidimensionales Array mit unbekannter unterer Grenze ab.

Aus der Sicht der Runtime MyArray[] != MyArray[*], aber für mehrdimensionale Arrays sind die beiden Notationen gleich. D.h., Type.GetType("MyArray [,]") == Type.GetType("MyArray[*,*]") ergibt TRUE.

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

Weitere Informationen