(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Type.GetType-Methode (String, Boolean, Boolean)

Ruft den Type mit dem angegebenen Namen ab. Dabei wird angegeben, ob bei der Suche die Groß- und Kleinschreibung berücksichtigt werden soll und ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

public static Type GetType(
	string typeName,
	bool throwOnError,
	bool ignoreCase
)

Parameter

typeName
Typ: System.String
Der durch die Assembly bezeichnete Name des abzurufenden Typs. Siehe AssemblyQualifiedName. Wenn sich der Typ in der aktuell ausgeführten Assembly oder in Mscorlib.dll befindet, ist eine Angabe des Typnamens einschließlich des qualifizierenden Namespace ausreichend.
throwOnError
Typ: System.Boolean
true , um eine Ausnahme auszulösen, wenn der Typ nicht gefunden werden kann; false, um null zurückzugeben. Die Angabe von false unterdrückt außerdem einige andere Ausnahmebedingungen, jedoch nicht alle. Informationen finden Sie im Abschnitt für Ausnahmen.
ignoreCase
Typ: System.Boolean
true , um ohne Berücksichtigung der Groß- und Kleinschreibung nach typeName zu suchen, false, um mit Berücksichtigung der Groß- und Kleinschreibung nach typeName zu suchen.

Rückgabewert

Typ: System.Type
Der Typ mit dem angegebenen Namen. Wenn der Typ nicht gefunden wird, gibt der throwOnError-Parameter an, ob null zurückgegeben oder eine Ausnahme ausgelöst wird. In einigen Fällen wird unabhängig vom Wert von throwOnError eine Ausnahme ausgelöst. Informationen finden Sie im Abschnitt für Ausnahmen.

AusnahmeBedingung
ArgumentNullException

typeName ist null.

TargetInvocationException

Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.

TypeLoadException

throwOnError ist true, und der Typ wurde nicht gefunden.

- oder -

throwOnError ist true, und typeName enthält ungültige Zeichen, z. B. ein eingebettetes Tabstoppzeichen.

- oder -

throwOnError ist true, und typeName ist eine leere Zeichenfolge.

- oder -

throwOnError ist true, und typeName stellt einen Arraytyp mit einer ungültigen Größe dar.

- oder -

typeName stellt ein Array von TypedReference dar.

ArgumentException

throwOnError ist true, und typeName enthält ungültige Syntax. Beispiel: "MyType[,*,]".

- oder -

typeName stellt einen generischen Typ mit einem Zeigertyp, einem ByRef-Typ oder Void als einem seiner Typargumente dar.

- oder -

typeName stellt einen generischen Typ mit einer falschen Anzahl von Typargumenten dar.

- oder -

typeName stellt einen generischen Typ dar, und eines seiner Typargumente entspricht nicht den Einschränkungen für den entsprechenden Typparameter.

FileNotFoundException

throwOnError ist true, und die Assembly oder eine ihrer Abhängigkeiten wurde nicht gefunden.

FileLoadException

Die Assembly oder eine ihrer Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.

BadImageFormatException

Die Assembly oder eine ihrer Abhängigkeiten ist ungültig.

- oder -

Version 2.0 oder höher der Common Language Runtime ist derzeit geladen, und die Assembly wurde mit einer höheren Version kompiliert.

Sie können die GetType-Methode verwenden, um ein Type-Objekt für einen Typ in einer anderen Assembly abzurufen, wenn der durch den Namespace qualifizierte Name bekannt ist. GetType verursacht das Laden der Assembly, die in typeName angegeben wurde. Sie können eine Assembly auch mit der Load-Methode laden und anschließend die GetType-Methode oder die GetTypes-Methode der Assembly-Klasse verwenden, um Type-Objekte abzurufen. Wenn sich ein Typ in einer während der Kompilierung des Programms bekannten Assembly befindet, ist es effizienter, typeof in C#, GetType in Visual Basic bzw. typeid in C++ zu verwenden.

GetType kann nur für von der Festplatte geladene Assemblys verwendet werden. Wenn GetType zur Suche nach einem Typ eingesetzt wird, der in einer dynamischen Assembly definiert ist, die unter Verwendung der System.Reflection.Emit-Dienste definiert wurde, könnten die Ergebnisse inkonsistent sein. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. h., ob sie mit einem der Zugriffsmodi RunAndSave oder Save der System.Reflection.Emit.AssemblyBuilderAccess-Enumeration erstellt wurde. Wenn die dynamische Assembly persistent ist und vor dem Aufruf von GetType auf der Festplatte gespeichert wurde, findet der Lader die auf der Festplatte gespeicherte Assembly, lädt diese Assembly und ruft den Typ aus dieser Assembly ab. Wenn die Assembly vor dem Aufruf von GetType nicht auf dem Datenträger gespeichert wurde, gibt die Methode null zurück. GetType erkennt keine flüchtigen dynamischen Assemblys. Daher gibt der Aufruf von GetType zum Abrufen eines Typs in einer flüchtigen dynamischen Assembly null zurück.

Abonnieren Sie zur Verwendung von GetType für ein dynamisches Modul die AppDomain.AssemblyResolve-Eigenschaft, und rufen Sie GetType vor dem Speichern auf. Andernfalls werden im Arbeitsspeicher zwei Exemplare der Assembly angelegt.

Der throwOnError-Parameter gibt an, was geschieht, wenn der Typ nicht gefunden wird, und unterdrückt auch bestimmte andere Ausnahmebedingungen, wie im Abschnitt zu den Ausnahmen beschrieben. Einige Ausnahmen werden unabhängig vom Wert von throwOnError ausgelöst. Wenn z. B. der Typ zwar gefunden wird, aber nicht geladen werden kann, wird auch dann eine TypeLoadException ausgelöst, wenn throwOnErrorfalse ist.

In der folgenden Tabelle sind die Member einer Basisklasse aufgeführt, die bei der Reflektion eines Typs von den Get-Methoden zurückgegeben werden.

Memberart

Static

Nicht statisch

Konstruktor

nein

nein

Feld

nein

Ja. Felder sind immer nach Namen und Signatur verdeckt.

Ereignis

Nicht zutreffend

Im allgemeinen Typsystem ist die Vererbung i. d. R. dieselbe wie die Vererbung der Methoden, die die Eigenschaft implementieren. Die Reflektion behandelt Eigenschaften als nach Namen und Signatur verdeckt. Siehe Hinweis 2 unten.

Methode

nein

Ja. Eine Methode, virtuell oder nicht virtuell, kann nach Namen oder nach Namen und Signatur verdeckt sein.

Geschachtelter Typ

nein

nein

Eigenschaft

Nicht zutreffend

Im allgemeinen Typsystem ist die Vererbung i. d. R. dieselbe wie die Vererbung der Methoden, die die Eigenschaft implementieren. Die Reflektion behandelt Eigenschaften als nach Namen und Signatur verdeckt. Siehe Hinweis 2 unten.

  1. Beim Verdecken nach Namen und Signatur werden alle Teile der Signatur berücksichtigt. Dies schließt benutzerdefinierte Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwaltete Aufrufkonventionen ein. Dies ist ein binärer Vergleich.

  2. Die Reflektion behandelt Eigenschaften und Ereignisse als nach Namen und Signatur verdeckt. Wenn eine Eigenschaft in einer Basisklasse sowohl einen Get-Accessor als auch einen Set-Accessor, in einer abgeleiteten Klasse hingegen nur einen Get-Accessor besitzt, verdeckt die Eigenschaft der abgeleiteten Klasse die Eigenschaft der Basisklasse, und der Set-Accessor der Basisklasse ist nicht mehr zugänglich.

  3. Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.

Es wird nicht nach Arrays oder COM-Typen gesucht, es sei denn, diese wurden zuvor in die Tabelle der verfügbaren Klassen geladen.

typeName kann den durch den Namespace qualifizierten Typnamen oder einen durch die Assembly qualifizierten Namen (einschließlich der Assemblynamensspezifikation) enthalten. Siehe AssemblyQualifiedName.

Wenn typeName den Namespace, nicht aber den Assemblynamen enthält, sucht diese Methode nur in der Assembly des aufrufenden Objekts sowie in Mscorlib.dll (in dieser Reihenfolge). Wenn typeName mit dem partiellen oder vollständigen Namen der Assembly voll gekennzeichnet ist, sucht diese Methode in der angegebenen Assembly. Wenn die Assembly über einen starken Namen verfügt, ist ein vollständiger Assemblyname erforderlich.

Die AssemblyQualifiedName-Eigenschaft gibt einen vollqualifizierten Typnamen einschließlich der geschachtelten Typen, des Assemblynamens und der Typargumente zurück. Alle Compiler, die die Common Language Runtime unterstützen, geben den einfachen Namen einer geschachtelten Klasse aus. Durch die Reflektion wird auf Anforderung ein ergänzter Name entsprechend den folgenden Konventionen gebildet.

HinweisHinweis

In .NET Framework, Version 2.0, wird der Assemblyidentität die Prozessorarchitektur hinzugefügt. Diese kann als Teil der Zeichenfolgen für Assemblynamen angegeben werden. Beispiel: "ProcessorArchitecture=msil". Aus Kompatibilitätsgründen ist diese Angabe jedoch nicht in der von der AssemblyQualifiedName-Eigenschaft zurückgegebenen Zeichenfolge enthalten. Sie können Typen auch laden, indem Sie ein AssemblyName-Objekt erstellen und dieses an eine geeignete Überladung der Load-Methode übergeben. Anschließend können Sie mithilfe der Assembly.GetType-Methode Typen aus der Assembly laden. Siehe auch AssemblyName.ProcessorArchitecture.

Trennzeichen

Bedeutung

Umgekehrter Schrägstrich (\)

Escapezeichen.

Einfaches schließendes Anführungszeichen (`)

Wird einer oder mehreren Ziffern vorangestellt, die die Zahl der Typparameter angeben, und wird am Ende des Namens eines generischen Typs aufgeführt.

Klammern ([])

Umschließen bei einem konstruierten generischen Typ eine Argumentliste für den generischen Typ. Umschließen in einer Typargumentliste einen durch die Assembly qualifizierten Typ.

Komma (,)

Wird dem Assemblynamen vorangestellt.

Punkt (.)

Kennzeichnet Namespacebezeichner.

Pluszeichen (+)

Wird einer geschachtelten Klasse vorangestellt.

Der vollqualifizierte Name einer Klasse könnte z. B. wie folgt lauten:

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Wenn der Namespace TopNamespace.Sub+Namespace hieße, müsste dem Pluszeichen (+) in der Zeichenfolge ein Escapezeichen (\) vorangestellt werden, damit es nicht als Schachtelungstrennzeichen interpretiert wird. Die Reflektion gibt diese Zeichenfolge wie folgt aus:

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Aus "++" wird "\+\+", und aus "\" wird "\\".

Dieser qualifizierte Name kann beibehalten und später zum Laden des Type verwendet werden. Um einen Type zu suchen und zu laden, verwenden Sie GetType entweder nur mit dem Typnamen oder mit dem durch die Assembly qualifizierten Typnamen. Wenn nur der Typname angegeben wird, sucht GetType nach Type in der Assembly des Aufrufers und danach in der Systemassembly. Wenn der durch die Assembly gekennzeichnete Typname angegeben wird, sucht GetType nach Type in einer beliebigen Assembly.

Die Typnamen können am Ende Zeichen enthalten, die zusätzliche Informationen über den Typ angeben, z. B., ob es sich um einen Verweis-, Zeiger- oder Arraytyp handelt. Um den Typnamen ohne diese nachfolgenden Zeichen abzurufen, verwenden Sie t.GetElementType().ToString(), wobei t der Typ ist.

Außer bei Assemblynamen sind Leerzeichen in allen Komponenten von Typnamen relevant. Beim Assemblynamen sind Leerzeichen nur vor dem Trennzeichen ',' relevant, dahinter werden sie ignoriert.

Der Name eines generischen Typs endet mit einem einfachen schließenden Anführungszeichen (`), gefolgt von einer oder mehreren Ziffern, die die Zahl der generischen Typargumente angeben. Durch diese Namensergänzung sind Compiler in der Lage, generische Typen mit identischen Namen zu unterstützen, die eine unterschiedliche Zahl an Typparametern aufweisen und im selben Gültigkeitsbereich auftreten. Die Reflektion gibt z. B. die ergänzten Namen Tuple`1 und Tuple`2 für die generischen Methoden Tuple(Of T) und Tuple(Of T0, T1) in Visual Basic bzw. Tuple<T> und Tuple<T0, T1> in Visual C# zurück.

Bei generischen Typen ist die Typargumentliste durch Klammern umschlossen, und die Typargumente sind durch Kommas getrennt. Ein generisches Dictionary<TKey, TValue> besitzt z. B. zwei Typparameter. Ein Dictionary<TKey, TValue> von MyType mit Schlüsseln vom Typ String könnte wie folgt dargestellt werden:

System.Collections.Generic.Dictionary`2[System.String,MyType]

Um einen durch die Assembly qualifizierten Typ in einer Typargumentliste anzugeben, umschließen Sie den durch die Assembly qualifizierten Typ mit Klammern. Andernfalls werden die Kommas, die die Bestandteile des durch die Assembly qualifizierten Namens trennen, als Trennzeichen für weitere Typargumente interpretiert. Ein Dictionary<TKey, TValue> von MyType aus MyAssembly.dll mit Schlüsseln vom Typ String kann z. B. wie folgt angegeben werden:

Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
HinweisHinweis

Ein durch die Assembly qualifizierter Typ darf nur in einer Typparameterliste mit Klammern umschlossen werden. Die Regeln für die Suche in Assemblys nach qualifizierten und nicht qualifizierten Typen in Typparameterlisten entsprechen den Regeln für qualifizierte und nicht qualifizierte nicht generische Typen.

Typen, für die Nullwerte zulässig sind, stellen einen Sonderfall unter den generischen Typen dar. Zum Beispiel wird ein Int32, für den Nullwerte zulässig sind, durch die Zeichenfolge "System.Nullable`1[System.Int32]" dargestellt.

HinweisHinweis

In C#, C++ und Visual Basic können Sie Typen, für die Nullwerte zulässig sind, auch mithilfe von Operatoren abrufen. Zum Beispiel wird ein Boolean-Typ, für den Nullwerte zulässig sind, in C# von typeof(Nullable<bool>), in C++ von Nullable<Boolean>::typeid und in Visual Basic von GetType(Nullable(Of Boolean)) zurückgegeben.

In der folgenden Tabelle wird die bei GetType für verschiedene Typen zu verwendende Syntax aufgeführt.

Typ

Verwendung

Ein Int32, für den Nullwerte zulässig sind

Type.GetType("System.Nullable`1[System.Int32]")

Ein nicht verwalteter Zeiger auf MyType

Type.GetType("MyType*")

Ein nicht verwalteter Zeiger auf einen Zeiger auf MyType

Type.GetType("MyType**")

Ein verwalteter Zeiger oder ein Verweis auf MyType

Type.GetType("MyType&"). Im Gegensatz zu Zeigern sind Verweise auf eine Ebene beschränkt.

Eine übergeordnete Klasse oder eine geschachtelte Klasse

Type.GetType("MyParentClass+MyNestedClass")

Ein eindimensionales Array mit 0 als unterer Grenze

Type.GetType("MyArray[]")

Ein eindimensionales Array mit unbekannter unterer Grenze

Type.GetType("MyArray[*]")

Ein n-dimensionales Array

Eine Folge von n-1 Kommas (,) innerhalb der eckigen Klammern. System.Object[,,] stellt z. B. ein dreidimensionales Object-Array dar.

Ein zweidimensionales Array von Arrays

Type.GetType("MyArray[][]")

Ein rechteckiges zweidimensionales Array mit unbekannten unteren Grenzen

Type.GetType("MyArray[,]")

Ein generischer Typ mit einem Typargument

Type.GetType("MyGenericType`1[MyType]")

Ein generischer Typ mit zwei Typargumenten

Type.GetType("MyGenericType`2[MyType,AnotherType]")

Ein generischer Typ mit zwei durch die Assembly qualifizierten Typargumenten

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")

Ein durch die Assembly qualifizierter generischer Typ mit einem durch die Assembly qualifizierten Typargument

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")

Ein generischer Typ, dessen Typargument ein generischer Typ mit zwei Typargumenten ist

Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]")

.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

.NET für Windows Phone-Apps

Unterstützt in: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2014 Microsoft