Type.GetType Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ruft ein Type-Objekt ab, das den angegebenen Typ darstellt.
Überlädt
GetType() |
Ruft den aktuellen Type ab. |
GetType(String) |
Ruft den Type mit dem angegebenen Namen ab. Bei der Suche wird die Groß-/Kleinschreibung beachtet. |
GetType(String, Boolean) |
Ruft den Type mit dem angegebenen Namen ab. Bei der Suche wird die Groß-/Kleinschreibung beachtet. Dabei wird angegeben, ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird. |
GetType(String, Boolean, Boolean) |
Ruft den Type mit dem angegebenen Namen ab. Dabei wird angegeben, ob bei der Suche Groß- und Kleinschreibung berücksichtigt werden soll und ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Ruft den Typ mit dem angegebenen Namen ab und stellt optional benutzerdefinierte Methoden bereit, um die Assembly und den Typ aufzulösen. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Ruft den Typ mit dem angegebenen Namen ab. Dabei wird angegeben, ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird, und optional werden benutzerdefinierte Methoden bereitgestellt, um die Assembly und den Typ aufzulösen. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Ruft den Typ mit dem angegebenen Namen ab. Dabei wird angegeben, ob bei der Suche die Groß-/Kleinschreibung beachtet werden soll und ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird, und optional werden benutzerdefinierte Methoden bereitgestellt, um die Assembly und den Typ aufzulösen. |
GetType()
Ruft den aktuellen Type ab.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type
Gibt zurück
Der aktuelle Type.
Implementiert
Ausnahmen
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
Siehe auch
Gilt für
GetType(String)
Ruft den Type mit dem angegebenen Namen ab. Bei der Suche wird die Groß-/Kleinschreibung beachtet.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType (string typeName);
public static Type? GetType (string typeName);
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Parameter
- typeName
- String
Der durch die Assembly bezeichnete Name des abzurufenden Typs. Siehe AssemblyQualifiedName. Wenn sich der Typ in der aktuell ausgeführten Assembly oder mscorlib.dll/System.Private.CoreLib.dll befindet, ist eine Angabe des Typnamens einschließlich des qualifizierenden Namespace ausreichend.
Gibt zurück
Der Typ mit dem angegebenen Namen, sofern gefunden, andernfalls null
.
Ausnahmen
typeName
ist null
.
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
typeName
stellt einen generischen Typ dar, der einen Zeigertyp, einen ByRef
-Typ oder Void als eines seiner Typargumente aufweist.
- oder -
typeName
stellt einen generischen Typ dar, der eine falsche Anzahl von Typargumenten aufweist.
- oder -
typeName
stellt einen generischen Typ dar, und eines seiner Typargumente erfüllt nicht die Einschränkungen für den entsprechenden Typparameter.
typeName
stellt ein Array von TypedReference dar.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
Hinweis: Fangen Sie in .NET Windows Store-Apps oder der portablenKlassenbibliothek stattdessen die Basisklassenausnahme IOException ab.
Die Assembly oder eine der zugehörigen 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.
Beispiele
Im folgenden Beispiel wird der Typ von abgerufen und System.Int32
dieses Typobjekt verwendet, um die FullName -Eigenschaft von System.Int32
anzuzeigen.
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Hinweise
Sie können die -Methode verwenden, um ein -Objekt für einen Typ in einer anderen Assembly zu erhalten, wenn Sie dessen durch die Assembly qualifizierten Namen kennen, der GetType von erhalten werden Type AssemblyQualifiedName kann. GetType bewirkt das Laden der in angegebenen typeName
Assembly. Sie können eine Assembly auch mithilfe der -Methode laden und dann die - oder Assembly.Load Assembly.GetType Assembly.GetTypes -Methode verwenden, um -Objekte Type zu erhalten. Wenn sich ein Typ zur Kompilierzeit in einer Assembly befindet, die ihrem Programm bekannt ist, ist es effizienter, in C# oder dem Operator typeof
GetType
in Visual Basic.
Hinweis
Wenn typeName
nicht gefunden werden kann, gibt der Aufruf der GetType(String) -Methode null
zurück. Es wird keine Ausnahme ausgelöst. Um zu steuern, ob eine Ausnahme ausgelöst wird, rufen Sie eine Überladung der Methode GetType auf, die über einen -Parameter throwOnError
verfügt.
GetType funktioniert nur für Assemblys, die vom Datenträger geladen wurden. Wenn Sie aufrufen, um einen Typ zu suchen, der in einer dynamischen Assembly definiert ist, die mithilfe der Dienste definiert wurde, kann es zu GetType System.Reflection.Emit inkonsistenten Verhaltensweisen kommen. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. b. mit den Zugriffsmodi oder RunAndSave
Save
der Enumeration erstellt System.Reflection.Emit.AssemblyBuilderAccess wird. Wenn die dynamische Assembly persistent ist und auf den Datenträger geschrieben wurde, bevor aufgerufen wird, sucht das Lader die gespeicherte Assembly auf dem Datenträger, lädt diese Assembly und ruft den Typ aus dieser GetType
Assembly ab. Wenn die Assembly beim Aufrufen von nicht auf dem Datenträger gespeichert GetType
wurde, gibt die Methode null
zurück. GetType
versteht vorübergehende dynamische Assemblys nicht. Daher gibt der Aufruf GetType
von zum Abrufen eines Typs in einer vorübergehenden dynamischen Assembly null
zurück.
Abonnieren Sie das Ereignis, und rufen Sie vor dem Speichern auf, um es für ein dynamisches GetType
AppDomain.AssemblyResolve Modul zu GetType
verwenden. Andernfalls erhalten Sie zwei Kopien der Assembly im Arbeitsspeicher.
Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Methoden zurückgegeben Get
werden, wenn sie einen Typ reflektieren.
Memberart | statischen | Nicht statisch |
---|---|---|
Konstruktor | Nein | Nein |
Feld | Nein | Ja. Ein Feld wird immer nach Name und Signatur ausblendet. |
Ereignis | Nicht zutreffend | Die allgemeine Typsystemregel ist, dass die Vererbung mit der Vererbung der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als "Hide-by-name-and-signature". Siehe Hinweis 2 weiter unten. |
Methode | Nein | Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Name oder Nach Name und Signatur ausblenden sein. |
Geschachtelter Typ | Nein | Nein |
Eigenschaft | Nicht zutreffend | Die allgemeine Typsystemregel ist, dass die Vererbung mit der Vererbung der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als "Hide-by-name-and-signature". Siehe Hinweis 2 weiter unten. |
Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwalteter Aufrufkonventionen. Dies ist ein binärer Vergleich.
Für Reflektion werden Eigenschaften und Ereignisse nach Name und Signatur ausblendet. Wenn Sie über eine Eigenschaft mit einem get- und einem set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen get-Accessor verfügt, blendet die abgeleitete Klasseneigenschaft die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter in der Basisklasse zugreifen.
Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.
Arrays oder COM-Typen werden nur dann gesucht, wenn sie bereits in die Tabelle der verfügbaren Klassen geladen wurden.
typeName
kann der Typname sein, der durch seinen Namespace qualifiziert wird, oder ein assemblyqualifizierter Name, der eine Assemblynamenspezifikation enthält. Siehe AssemblyQualifiedName.
Wenn den Namespace, aber nicht den Assemblynamen enthält, durchsucht diese Methode nur die Assembly des aufrufenden Objekts und mscorlib.dll/System.Private.CoreLib.dll in dieser typeName
Reihenfolge. Wenn typeName mit dem partiellen oder vollständigen Assemblynamen vollqualifiziert ist, durchsucht diese Methode die angegebene Assembly. Wenn die Assembly einen starken Namen hat, ist ein vollständiger Assemblyname erforderlich.
Die AssemblyQualifiedName -Eigenschaft gibt einen vollqualifizierten Typnamen zurück, einschließlich geschachtelter Typen, des Assemblynamens und generischer Typargumente. Alle Compiler, die die Common Language Runtime unterstützen, geben den einfachen Namen einer geschachtelten Klasse aus, und reflektion erstellt bei der Abfrage einen verfingelten Namen gemäß den folgenden Konventionen.
Hinweis
In .NET Framework Version 2.0 wird die Prozessorarchitektur der Assemblyidentität hinzugefügt und kann als Teil von Assemblynamenzeichenfolgen angegeben werden. Beispiel: "ProcessorArchitecture=msil". Sie ist jedoch aus Kompatibilitätsgründen nicht in der von der -Eigenschaft zurückgegebenen AssemblyQualifiedName Zeichenfolge enthalten. Sie können Typen auch laden, indem Sie ein AssemblyName -Objekt erstellen und es an eine entsprechende Überladung der -Methode Load übergeben. Anschließend können Sie die -Methode Assembly.GetType verwenden, um Typen aus der Assembly zu laden. Siehe auch AssemblyName.ProcessorArchitecture.
Trennzeichen | Bedeutung |
---|---|
Umgekehrter Schrägstrich (\) | Escapezeichen. |
Backtick (') | Steht vor einer oder mehreren Ziffern, die die Anzahl der Typparameter am Ende des Namens eines generischen Typs darstellen. |
Eckige Klammern ([]) | Schließen Sie eine generische Typargumentliste für einen konstruierten generischen Typ ein. Schließen Sie in einer Typargumentliste einen durch die Assembly qualifizierten Typ ein. |
Komma (,) | Steht vor dem Assemblynamen. |
Punkt (.) | Gibt Namespacebezeichner an. |
Pluszeichen (+) | Vor einer geschachtelten Klasse. |
Beispielsweise könnte der vollqualifizierte Name für eine Klasse wie der folgende aussehen:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Wenn der Namespace TopNamespace.Sub+Namespace wäre, müsste die Zeichenfolge dem Pluszeichen (+) ein Escapezeichen ( ) voranschreiben, um zu verhindern, dass es als Schachtelungstrennzeichen interpretiert \ wird. Die Reflektion gibt diese Zeichenfolge wie folgt aus:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Ein "++" wird zu " \ + \ +", und ein " \ " wird zu " \ \ ".
Dieser qualifizierte Name kann beibehalten und später zum Laden von verwendet Type werden. Um nach zu suchen und zu laden, verwenden Sie entweder nur mit dem Typnamen oder mit dem durch die Type GetType Assembly qualifizierten Typnamen. GetType mit dem Typnamen sucht nur in der Assembly des Aufrufers nach und dann Type in der System-Assembly. GetType mit dem qualifizierten Typnamen der Assembly sucht in jeder Type Assembly nach .
Typnamen können folgende Zeichen enthalten, die zusätzliche Informationen zum Typ enthalten, z. B. ob der Typ ein Verweistyp, ein Zeigertyp oder ein Arraytyp ist. Um den Typnamen ohne diese nach folgenden Zeichen abzurufen, verwenden Sie t.GetElementType().ToString()
, wobei der Typ t
ist.
Leerzeichen sind in allen Typnamenkomponenten mit Ausnahme des Assemblynamens relevant. Im Assemblynamen sind Leerzeichen vor dem Trennzeichen "," relevant, Leerzeichen nach dem Trennzeichen "," werden jedoch ignoriert.
Der Name eines generischen Typs endet mit einem Backtick ( ), gefolgt von Ziffern, die die Anzahl ` generischer Typargumente darstellen. Der Zweck dieser Namenshennung besteht im Zulassen, dass Compiler generische Typen mit demselben Namen, aber mit einer unterschiedlichen Anzahl von Typparametern unterstützen können, die im gleichen Bereich auftreten. Die Reflektion gibt z. B. die verfingelten Namen und aus den generischen Methoden und in Visual Basic oder und Tuple`1
Tuple`2
in Visual Tuple(Of T)
Tuple(Of T0, T1)
Tuple<T>
Tuple<T0, T1>
C# zurück.
Bei generischen Typen ist die Typargumentliste in Klammern eingeschlossen, und die Typargumente werden durch Kommas getrennt. Ein generisches verfügt Dictionary<TKey,TValue> beispielsweise über zwei Typparameter. Ein Dictionary<TKey,TValue> von MyType
mit Schlüsseln vom Typ kann wie folgt String dargestellt werden:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Um einen durch die Assembly qualifizierten Typ in einer Typargumentliste anzugeben, schließen Sie den durch die Assembly qualifizierten Typ in eckige Klammern ein. Andernfalls werden die Kommas, die die Teile des durch die Assembly qualifizierten Namens trennen, als Trennzeichen für zusätzliche Typargumente interpretiert. Beispielsweise kann ein von fromMyAssembly.dll mit Schlüsseln vom Dictionary<TKey,TValue> Typ wie folgt angegeben MyType
String werden:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Hinweis
Ein assemblyqualifizierter Typ kann nur in Klammern eingeschlossen werden, wenn er in einer Typparameterliste angezeigt wird. Die Regeln für die Suche nach Assemblys nach qualifizierten und nicht qualifizierten Typen in Typparameterlisten sind identisch mit den Regeln für qualifizierte und nicht qualifizierte nicht allgemeine Typen.
Nullable-Typen sind ein Sonderfall generischer Typen. Ein Nullable wird beispielsweise Int32 durch die Zeichenfolge "System.Nullable'1[System.Int32]" dargestellt.
Hinweis
In C#, C++ und Visual Basic können Sie mithilfe von Typoperatoren auch Nullable-Typen erhalten. Beispielsweise wird der Boolean Nullable-Typ typeof(Nullable<bool>)
von in C#, von in C++ und Nullable<Boolean>::typeid
von in GetType(Nullable(Of Boolean))
Visual Basic.
Die folgende Tabelle zeigt die Syntax, mit der Sie für GetType
verschiedene Typen verwenden.
So erhalten Sie | Verwendung |
---|---|
Ein Nullable-Wert Int32 | 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 Verweis auf MyType |
Type.GetType("MyType&") . Beachten Sie, dass Verweise im Gegensatz zu Zeigern auf eine Ebene beschränkt sind. |
Eine übergeordnete Klasse und eine geschachtelte Klasse | Type.GetType("MyParentClass+MyNestedClass") |
Ein eindimensionales Array mit einer unteren Grenze von 0 | Type.GetType("MyType[]") |
Ein eindimensionales Array mit einer unbekannten Untergrenze | Type.GetType("MyType[*]") |
Ein n-dimensionales Array | Ein Komma (,) innerhalb der Klammern insgesamt n-1-mal. Stellt beispielsweise System.Object[,,] ein dreidimensionales Array Object dar. |
Ein Array eindimensionaler Arrays | Type.GetType("MyType[][]") |
Ein rechteckiges zweidimensionales Array mit unbekannten unteren Begrenzungen | Type.GetType("MyType[,]") |
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 assemblyqualifizierten Typargumenten | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Ein assemblyqualifizierter 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]]") |
Siehe auch
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Angeben vollständig gekennzeichneter Typnamen
Gilt für
GetType(String, Boolean)
Ruft den Type mit dem angegebenen Namen ab. Bei der Suche wird die Groß-/Kleinschreibung beachtet. Dabei wird angegeben, ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType (string typeName, bool throwOnError);
public static Type? GetType (string typeName, bool throwOnError);
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parameter
- typeName
- String
Der durch die Assembly bezeichnete Name des abzurufenden Typs. Siehe AssemblyQualifiedName. Wenn sich der Typ in der aktuell ausgeführten Assembly oder mscorlib.dll/System.Private.CoreLib.dll befindet, ist eine Angabe des Typnamens einschließlich des qualifizierenden Namespace ausreichend.
- throwOnError
- Boolean
true
, damit eine Ausnahme ausgelöst wird, wenn der Typ nicht gefunden werden kann, false
, damit null
zurückgegeben wird. Die Angabe von false
unterdrückt auch einige andere Ausnahmebedingungen, aber nicht alle. Informationen finden Sie im Abschnitt für Ausnahmen.
Gibt zurück
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.
Ausnahmen
typeName
ist null
.
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
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.
throwOnError
ist true
, und typeName
enthält ungültige Syntax, beispielsweise "MyType[,*,]".
- oder -
typeName
stellt einen generischen Typ dar, der einen Zeigertyp, einen ByRef
-Typ oder Void als eines seiner Typargumente aufweist.
- oder -
typeName
stellt einen generischen Typ dar, der eine falsche Anzahl von Typargumenten aufweist.
- oder -
typeName
stellt einen generischen Typ dar, und eines seiner Typargumente erfüllt nicht die Einschränkungen für den entsprechenden Typparameter.
throwOnError
ist true
, und die Assembly oder eine der zugehörigen Abhängigkeiten wurde nicht gefunden.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
Hinweis: Fangen Sie in .NET für Windows Store-Apps oder die portable Klassenbibliothekstattdessen die Basisklassenausnahme IOException ab.
Die Assembly oder eine der zugehörigen 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.
Beispiele
Im folgenden Beispiel wird der Typ von abgerufen System.Int32
und dieses Typobjekt verwendet, um die FullName -Eigenschaft von System.Int32
anzuzeigen. Wenn ein Typobjekt auf eine Assembly verweist, die nicht vorhanden ist, löst dieses Beispiel eine Ausnahme aus.
using namespace System;
int main()
{
try {
// Get the type of a specified class.
Type^ myType1 = Type::GetType( "System.Int32" );
Console::WriteLine( "The full name is {0}.\n", myType1->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type System.Int32",
e->GetType()->Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type^ myType2 = Type::GetType( "NoneSuch", true );
Console::WriteLine( "The full name is {0}.", myType2->FullName );
}
catch ( TypeLoadException^ e ) {
Console::WriteLine("{0}: Unable to load type NoneSuch",
e->GetType()->Name);
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
using System;
class Example
{
public static void Main()
{
try {
// Get the type of a specified class.
Type myType1 = Type.GetType("System.Int32");
Console.WriteLine("The full name is {0}.\n", myType1.FullName);
}
catch (TypeLoadException e)
{
Console.WriteLine("{0}: Unable to load type System.Int32", e.GetType().Name);
}
try {
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Type myType2 = Type.GetType("NoneSuch", true);
Console.WriteLine("The full name is {0}.", myType2.FullName);
}
catch(TypeLoadException e) {
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name);
}
}
}
// The example displays the following output:
// The full name is System.Int32.
//
// TypeLoadException: Unable to load type NoneSuch
Class Example
Public Shared Sub Main()
Try
' Get the type of the specified class.
Dim myType1 As Type = Type.GetType("System.Int32")
Console.WriteLine("The full name is {0}.", myType1.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type System.Int32",
e.GetType().Name)
End Try
Console.WriteLine()
Try
' Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
Dim myType2 As Type = Type.GetType("NoneSuch", True)
Console.WriteLine("The full name is {0}.", myType2.FullName)
Catch e As TypeLoadException
Console.WriteLine("{0}: Unable to load type NoneSuch", e.GetType().Name)
End Try
End Sub
End Class
' The example displays the following output:
' The full name is System.Int32.
'
' TypeLoadException: Unable to load type NoneSuch
Hinweise
Sie können die -Methode verwenden, um ein -Objekt für einen Typ in einer anderen Assembly zu erhalten, wenn Sie dessen durch die Assembly qualifizierten Namen kennen, der GetType von erhalten werden Type AssemblyQualifiedName kann. GetType bewirkt das Laden der in angegebenen typeName
Assembly. Sie können eine Assembly auch mithilfe der -Methode laden und dann die - oder Assembly.Load Assembly.GetType Assembly.GetTypes -Methode verwenden, um -Objekte Type zu erhalten. Wenn sich ein Typ zur Kompilierzeit in einer Assembly befindet, die ihrem Programm bekannt ist, ist es effizienter, in C# oder dem Operator typeof
GetType
in Visual Basic.
GetType
funktioniert nur für Assemblys, die vom Datenträger geladen wurden. Wenn Sie aufrufen, um einen Typ zu suchen, der in einer dynamischen Assembly definiert ist, die mithilfe der Dienste definiert wurde, kann es zu GetType
System.Reflection.Emit inkonsistenten Verhaltensweisen kommen. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. b. mit den Zugriffsmodi oder RunAndSave
Save
der Enumeration erstellt System.Reflection.Emit.AssemblyBuilderAccess wird. Wenn die dynamische Assembly persistent ist und auf den Datenträger geschrieben wurde, bevor aufgerufen wird, sucht das Lader die gespeicherte Assembly auf dem Datenträger, lädt diese Assembly und ruft den Typ aus dieser GetType
Assembly ab. Wenn die Assembly beim Aufrufen von nicht auf dem Datenträger gespeichert GetType
wurde, gibt die Methode null
zurück. GetType
versteht vorübergehende dynamische Assemblys nicht. Daher gibt der Aufruf GetType
von zum Abrufen eines Typs in einer vorübergehenden dynamischen Assembly null
zurück.
Abonnieren Sie das Ereignis, und rufen Sie vor dem Speichern auf, um es für ein dynamisches GetType
AppDomain.AssemblyResolve Modul zu GetType
verwenden. Andernfalls erhalten Sie zwei Kopien der Assembly im Arbeitsspeicher.
Der -Parameter gibt an, was geschieht, wenn der Typ nicht gefunden wird, und unterdrückt auch bestimmte andere Ausnahmebedingungen, wie im Abschnitt throwOnError
Ausnahmen beschrieben. Einige Ausnahmen werden unabhängig vom Wert von throwOnError
ausgelöst. Wenn beispielsweise der Typ gefunden wird, aber nicht geladen werden kann, wird eine ausgelöst, TypeLoadException auch wenn throwOnError
false
ist.
Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Methoden zurückgegeben Get
werden, wenn sie einen Typ reflektieren.
Memberart | statischen | Nicht statisch |
---|---|---|
Konstruktor | Nein | Nein |
Feld | Nein | Ja. Ein Feld wird immer nach Name und Signatur ausblendet. |
Ereignis | Nicht zutreffend | Die allgemeine Typsystemregel ist, dass die Vererbung mit der Vererbung der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als "Hide-by-name-and-signature". Siehe Hinweis 2 weiter unten. |
Methode | Nein | Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Name oder Nach Name und Signatur ausblenden sein. |
Geschachtelter Typ | Nein | Nein |
Eigenschaft | Nicht zutreffend | Die allgemeine Typsystemregel ist, dass die Vererbung mit der Vererbung der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als "Hide-by-name-and-signature". Siehe Hinweis 2 weiter unten. |
Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwalteter Aufrufkonventionen. Dies ist ein binärer Vergleich.
Für Reflektion werden Eigenschaften und Ereignisse nach Name und Signatur ausblendet. Wenn Sie über eine Eigenschaft mit einem get- und einem set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen get-Accessor verfügt, blendet die abgeleitete Klasseneigenschaft die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter in der Basisklasse zugreifen.
Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.
Arrays oder COM-Typen werden nur dann gesucht, wenn sie bereits in die Tabelle der verfügbaren Klassen geladen wurden.
typeName
kann der Typname sein, der durch seinen Namespace qualifiziert wird, oder ein assemblyqualifizierter Name, der eine Assemblynamenspezifikation enthält. Siehe AssemblyQualifiedName.
Wenn den Namespace, aber nicht den Assemblynamen enthält, durchsucht diese Methode nur die Assembly des aufrufenden Objekts und mscorlib.dll/System.Private.CoreLib.dll in dieser typeName
Reihenfolge. Wenn typeName mit dem partiellen oder vollständigen Assemblynamen vollqualifiziert ist, durchsucht diese Methode die angegebene Assembly. Wenn die Assembly einen starken Namen hat, ist ein vollständiger Assemblyname erforderlich.
Die AssemblyQualifiedName -Eigenschaft gibt einen vollqualifizierten Typnamen zurück, einschließlich geschachtelter Typen, des Assemblynamens und generischer Argumente. Alle Compiler, die die Common Language Runtime unterstützen, geben den einfachen Namen einer geschachtelten Klasse aus, und reflektion erstellt bei der Abfrage einen verfingelten Namen gemäß den folgenden Konventionen.
Hinweis
In .NET Framework Version 2.0 wird die Prozessorarchitektur der Assemblyidentität hinzugefügt und kann als Teil von Assemblynamenzeichenfolgen angegeben werden. Beispiel: "ProcessorArchitecture=msil". Sie ist jedoch aus Kompatibilitätsgründen nicht in der von der -Eigenschaft zurückgegebenen AssemblyQualifiedName Zeichenfolge enthalten. Sie können Typen auch laden, indem Sie ein AssemblyName -Objekt erstellen und es an eine entsprechende Überladung der -Methode Load übergeben. Anschließend können Sie die -Methode Assembly.GetType verwenden, um Typen aus der Assembly zu laden. Siehe auch AssemblyName.ProcessorArchitecture.
Trennzeichen | Bedeutung |
---|---|
Umgekehrter Schrägstrich (\) | Escapezeichen. |
Backtick (') | Steht vor einer oder mehreren Ziffern, die die Anzahl der Typparameter am Ende des Namens eines generischen Typs darstellen. |
Eckige Klammern ([]) | Schließen Sie eine generische Typargumentliste für einen konstruierten generischen Typ ein. Schließen Sie in einer Typargumentliste einen durch die Assembly qualifizierten Typ ein. |
Komma (,) | Steht vor dem Assemblynamen. |
Punkt (.) | Gibt Namespacebezeichner an. |
Pluszeichen (+) | Vor einer geschachtelten Klasse. |
Beispielsweise könnte der vollqualifizierte Name für eine Klasse wie der folgende aussehen:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Wenn der Namespace TopNamespace.Sub+Namespace wäre, müsste die Zeichenfolge dem Pluszeichen (+) ein Escapezeichen ( ) voranschreiben, um zu verhindern, dass es als Schachtelungstrennzeichen interpretiert \ wird. Die Reflektion gibt diese Zeichenfolge wie folgt aus:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Ein "++" wird zu " \ + \ +", und ein " \ " wird zu " \ \ ".
Dieser qualifizierte Name kann beibehalten und später zum Laden von verwendet Type werden. Verwenden Sie zum Suchen und Laden eines Type entweder nur mit dem GetType Typnamen oder mit dem qualifizierten Assemblytypnamen. GetType mit dem Typnamen sucht nur Type in der Assembly des Aufrufers und dann in der Systemassembly nach . GetType mit dem qualifizierten Typnamen der Assembly sucht in jeder Assembly nach Type dem .
Typnamen können nachfolgende Zeichen enthalten, die zusätzliche Informationen zum Typ kennzeichnen, z. B. ob der Typ ein Verweistyp, ein Zeigertyp oder ein Arraytyp ist. Verwenden Sie , wobei der Typ ist, um den Typnamen ohne diese nachgestellten Zeichen t.GetElementType().ToString()
t
abzurufen.
Leerzeichen sind in allen Typnamenkomponenten mit Ausnahme des Assemblynamens relevant. Im Assemblynamen sind Leerzeichen vor dem Trennzeichen "," relevant, Leerzeichen nach dem Trennzeichen "," werden jedoch ignoriert.
Der Name eines generischen Typs endet mit einem Backtick ( ` ), gefolgt von Ziffern, die die Anzahl der generischen Typargumente darstellen. Der Zweck dieses Namens-Manglings besteht darin, Compilern zu ermöglichen, generische Typen mit dem gleichen Namen, aber mit unterschiedlicher Anzahl von Typparametern zu unterstützen, die im selben Bereich auftreten. Die Reflektion gibt z. B. die abgeschrungenen Namen Tuple`1
und Tuple`2
aus den generischen Methoden und Tuple(Of T)
in Visual Basic oder und in Visual Tuple(Of T0, T1)
Tuple<T>
Tuple<T0, T1>
C# zurück.
Bei generischen Typen wird die Typargumentliste in Klammern eingeschlossen, und die Typargumente werden durch Kommas getrennt. Ein generischer verfügt beispielsweise Dictionary<TKey,TValue> über zwei Typparameter. Eine Dictionary<TKey,TValue> von MyType
mit Schlüsseln vom Typ kann wie folgt String dargestellt werden:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Um einen mit assemblyqualifizierten Typ in einer Typargumentliste anzugeben, schließen Sie den assemblyqualifizierten Typ in Klammern ein. Andernfalls werden die Kommas, die die Teile des durch die Assembly qualifizierten Namens trennen, als Trennzeichen für zusätzliche Typargumente interpretiert. Beispielsweise kann ein Dictionary<TKey,TValue> von aus MyAssembly.dll mit MyType
Schlüsseln vom Typ wie folgt angegeben String werden:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Hinweis
Ein durch eine Assembly qualifizierter Typ kann nur in Klammern eingeschlossen werden, wenn er in einer Typparameterliste angezeigt wird. Die Regeln zum Durchsuchen von Assemblys nach qualifizierten und nicht qualifizierten Typen in Typparameterlisten sind identisch mit den Regeln für qualifizierte und nicht qualifizierte nicht generische Typen.
Nullable-Typen sind ein Sonderfall generischer Typen. Ein Nullable-Wert wird beispielsweise Int32 durch die Zeichenfolge "System.Nullable'1[System.Int32]" dargestellt.
Hinweis
In C#, C++ und Visual Basic können Sie auch Typen abrufen, die NULL-Werte enthalten, indem Sie Typoperatoren verwenden. Beispielsweise wird der Boolean Nullable-Typ von typeof(Nullable<bool>)
in C#, von Nullable<Boolean>::typeid
in C++ und von in Visual Basic GetType(Nullable(Of Boolean))
zurückgegeben.
Die folgende Tabelle zeigt die Syntax, mit der Sie GetType
für verschiedene Typen verwenden.
So erhalten Sie | Verwendung |
---|---|
Ein NULL-Wert, der ZULÄSSIG IST Int32 | 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 Verweis auf MyType |
Type.GetType("MyType&") . Beachten Sie, dass Verweise im Gegensatz zu Zeigern auf eine Ebene beschränkt sind. |
Eine übergeordnete Klasse und eine geschachtelte Klasse | Type.GetType("MyParentClass+MyNestedClass") |
Ein eindimensionales Array mit einer Untergrenze von 0 | Type.GetType("MyArray[]") |
Ein eindimensionales Array mit einer unbekannten Untergrenze | Type.GetType("MyArray[*]") |
Ein n-dimensionales Array | Ein Komma (,) innerhalb der Klammern insgesamt n-1-mal. Stellt beispielsweise System.Object[,,] ein dreidimensionales Object Array dar. |
Array eines zweidimensionalen Arrays | Type.GetType("MyArray[][]") |
Ein rechteckiges zweidimensionales Array mit unbekannten Untergrenzen | 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 assemblyqualifizierten Typargumenten | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Ein mit assemblyqualifizierten generischen Typ mit einem assemblyqualifizierten 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]]") |
Siehe auch
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Angeben vollständig gekennzeichneter Typnamen
Gilt für
GetType(String, Boolean, Boolean)
Ruft den Type mit dem angegebenen Namen ab. Dabei wird angegeben, ob bei der Suche Groß- und Kleinschreibung berücksichtigt werden soll und ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, bool throwOnError, bool ignoreCase);
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parameter
- typeName
- String
Der durch die Assembly bezeichnete Name des abzurufenden Typs. Siehe AssemblyQualifiedName. Wenn sich der Typ in der aktuell ausgeführten Assembly oder mscorlib.dll/System.Private.CoreLib.dll befindet, ist eine Angabe des Typnamens einschließlich des qualifizierenden Namespace ausreichend.
- throwOnError
- Boolean
true
, damit eine Ausnahme ausgelöst wird, wenn der Typ nicht gefunden werden kann, false
, damit null
zurückgegeben wird. Die Angabe von false
unterdrückt auch einige andere Ausnahmebedingungen, aber nicht alle. Informationen finden Sie im Abschnitt für Ausnahmen.
- ignoreCase
- Boolean
true
, um ohne Beachtung der Groß-/Kleinschreibung nach typeName
zu suchen, false
, um mit Beachtung der Groß-/Kleinschreibung nach typeName
zu suchen.
Gibt zurück
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.
Ausnahmen
typeName
ist null
.
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
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.
throwOnError
ist true
, und typeName
enthält ungültige Syntax, beispielsweise "MyType[,*,]".
- oder -
typeName
stellt einen generischen Typ dar, der einen Zeigertyp, einen ByRef
-Typ oder Void als eines seiner Typargumente aufweist.
- oder -
typeName
stellt einen generischen Typ dar, der eine falsche Anzahl von Typargumenten aufweist.
- oder -
typeName
stellt einen generischen Typ dar, und eines seiner Typargumente erfüllt nicht die Einschränkungen für den entsprechenden Typparameter.
throwOnError
ist true
, und die Assembly oder eine der zugehörigen Abhängigkeiten wurde nicht gefunden.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
Die Assembly oder eine der zugehörigen 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.
Hinweise
Sie können die GetType -Methode verwenden, um ein Type -Objekt für einen Typ in einer anderen Assembly abzurufen, wenn Sie den durch die Assembly qualifizierten Namen kennen, der von abgerufen werden AssemblyQualifiedName kann. GetType bewirkt das Laden der in angegebenen typeName
Assembly. Sie können eine Assembly auch mithilfe der -Methode laden und dann die - Assembly.Load Assembly.GetType oder Assembly.GetTypes -Methode verwenden, um Type Objekte abzurufen. Wenn sich ein Typ in einer Assembly befindet, die Ihrem Programm zur Kompilierzeit bekannt ist, ist es effizienter, in C# oder im Operator in Visual Basic zu typeof
GetType
verwenden.
GetType
funktioniert nur für Assemblys, die vom Datenträger geladen werden. Wenn Sie GetType
aufrufen, um einen Typ zu suchen, der in einer dynamischen Assembly definiert ist, die mithilfe der Dienste definiert System.Reflection.Emit wurde, erhalten Sie möglicherweise inkonsistentes Verhalten. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. h. mithilfe des RunAndSave
Zugriffsmodus oder der -Enumeration erstellt Save
System.Reflection.Emit.AssemblyBuilderAccess wird. Wenn die dynamische Assembly persistent ist und auf den Datenträger geschrieben wurde, bevor GetType
aufgerufen wird, sucht das Ladeprogramm die gespeicherte Assembly auf dem Datenträger, lädt diese Assembly und ruft den Typ aus dieser Assembly ab. Wenn die Assembly beim Aufruf von nicht auf dem Datenträger gespeichert GetType
wurde, gibt die Methode null
zurück. GetType
versteht vorübergehende dynamische Assemblys nicht. daher gibt der Aufruf GetType
von zum Abrufen eines Typs in einer vorübergehenden dynamischen Assembly null
zurück.
Um für GetType
ein dynamisches Modul zu verwenden, abonnieren Sie das AppDomain.AssemblyResolve Ereignis, und rufen Sie GetType
vor dem Speichern auf. Andernfalls erhalten Sie zwei Kopien der Assembly im Arbeitsspeicher.
Der throwOnError
-Parameter gibt an, was geschieht, wenn der Typ nicht gefunden wird, und unterdrückt auch bestimmte andere Ausnahmebedingungen, wie im Abschnitt Ausnahmen beschrieben. Einige Ausnahmen werden unabhängig vom Wert von throwOnError
ausgelöst. Wenn z. B. der Typ gefunden, aber nicht geladen werden kann, wird eine TypeLoadException ausgelöst, auch wenn throwOnError
false
ist.
Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Methoden zurückgegeben werden, wenn sie Get
einen Typ reflektieren.
Memberart | statischen | Nicht statisch |
---|---|---|
Konstruktor | Nein | Nein |
Feld | Nein | Ja. Ein Feld wird immer nach Name und Signatur ausgeblendet. |
Ereignis | Nicht zutreffend | Die allgemeine Typsystemregel ist, dass die Vererbung mit der der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als hide-by-name-and-signature. Siehe Hinweis 2 weiter unten. |
Methode | Nein | Ja. Eine Methode (sowohl virtuell als auch nicht virtuell) kann nach Namen oder nach Name und Signatur ausgeblendet werden. |
Geschachtelter Typ | Nein | Nein |
Eigenschaft | Nicht zutreffend | Die allgemeine Typsystemregel ist, dass die Vererbung mit der der Methoden identisch ist, die die -Eigenschaft implementieren. Reflektion behandelt Eigenschaften als hide-by-name-and-signature. Siehe Hinweis 2 weiter unten. |
Hide-by-name-and-signature berücksichtigt alle Teile der Signatur, einschließlich benutzerdefinierter Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwalteter Aufrufkonventionen. Dies ist ein binärer Vergleich.
Für die Reflektion werden Eigenschaften und Ereignisse nach Name und Signatur ausgeblendet. Wenn Sie über eine Eigenschaft mit einem get- und einem set-Accessor in der Basisklasse verfügen, die abgeleitete Klasse jedoch nur über einen get-Accessor verfügt, blendet die Eigenschaft der abgeleiteten Klasse die Basisklasseneigenschaft aus, und Sie können nicht auf den Setter für die Basisklasse zugreifen.
Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.
Arrays oder COM-Typen werden nur gesucht, wenn sie bereits in die Tabelle der verfügbaren Klassen geladen wurden.
typeName
kann der Typname sein, der durch seinen Namespace gekennzeichnet ist, oder ein durch die Assembly qualifizierter Name, der eine Assemblynamenspezifikation enthält. Siehe AssemblyQualifiedName.
Wenn typeName
den Namespace, aber nicht den Assemblynamen enthält, durchsucht diese Methode nur die Assembly des aufrufenden Objekts und mscorlib.dll/System.Private.CoreLib.dll in dieser Reihenfolge. Wenn typeName mit dem partiellen oder vollständigen Assemblynamen vollqualifiziert ist, sucht diese Methode in der angegebenen Assembly. Wenn die Assembly einen starken Namen hat, ist ein vollständiger Assemblyname erforderlich.
Die AssemblyQualifiedName -Eigenschaft gibt einen vollqualifizierten Typnamen zurück, einschließlich geschachtelter Typen, des Assemblynamens und der Typargumente. Alle Compiler, die die Common Language Runtime unterstützen, geben den einfachen Namen einer geschachtelten Klasse aus, und reflektion erstellt bei abfragenden Abfragen einen abgeglichenen Namen gemäß den folgenden Konventionen.
Hinweis
In .NET Framework Version 2.0 wird der Assemblyidentität eine Prozessorarchitektur hinzugefügt, die als Teil von Assemblynamenzeichenfolgen angegeben werden kann. Beispiel: "ProcessorArchitecture=msil". Aus Kompatibilitätsgründen ist sie jedoch nicht in der von der -Eigenschaft zurückgegebenen Zeichenfolge AssemblyQualifiedName enthalten. Sie können Typen auch laden, indem Sie ein -Objekt erstellen AssemblyName und es an eine entsprechende Überladung der Load -Methode übergeben. Anschließend können Sie die Assembly.GetType -Methode verwenden, um Typen aus der Assembly zu laden. Siehe auch AssemblyName.ProcessorArchitecture.
Trennzeichen | Bedeutung |
---|---|
Umgekehrter Schrägstrich (\) | Escapezeichen. |
Backtick (') | Steht vor einer oder mehreren Ziffern, die die Anzahl von Typparametern darstellen, die sich am Ende des Namens eines generischen Typs befinden. |
Klammern ([]) | Schließen Sie eine generische Typargumentliste für einen konstruierten generischen Typ ein. Schließen Sie in eine Typargumentliste einen assemblyqualifizierten Typ ein. |
Komma (,) | Vor dem Assemblynamen. |
Punkt (.) | Gibt Namespacebezeichner an. |
Pluszeichen (+) | Vor einer geschachtelten Klasse. |
Beispielsweise könnte der vollqualifizierte Name für eine Klasse wie folgt aussehen:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Wenn der Namespace TopNamespace.Sub+Namespace wäre, müsste die Zeichenfolge dem Pluszeichen (+) ein Escapezeichen \ () vorangehen, um zu verhindern, dass sie als Schachtelungstrennzeichen interpretiert wird. Reflektion gibt diese Zeichenfolge wie folgt aus:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Ein "++" wird zu " \ + \ +", und ein " \ " wird zu " \ \ ".
Dieser qualifizierte Name kann beibehalten und später zum Laden von verwendet Type werden. Verwenden Sie zum Suchen und Laden eines Type entweder nur mit dem GetType Typnamen oder mit dem qualifizierten Assemblytypnamen. GetType mit dem Typnamen sucht nur Type in der Assembly des Aufrufers und dann in der Systemassembly nach . GetType mit dem qualifizierten Typnamen der Assembly sucht in jeder Assembly nach Type dem .
Typnamen können nachfolgende Zeichen enthalten, die zusätzliche Informationen zum Typ kennzeichnen, z. B. ob der Typ ein Verweistyp, ein Zeigertyp oder ein Arraytyp ist. Verwenden Sie , wobei der Typ ist, um den Typnamen ohne diese nachgestellten Zeichen t.GetElementType().ToString()
t
abzurufen.
Leerzeichen sind in allen Typnamenkomponenten mit Ausnahme des Assemblynamens relevant. Im Assemblynamen sind Leerzeichen vor dem Trennzeichen "," relevant, Leerzeichen nach dem Trennzeichen "," werden jedoch ignoriert.
Der Name eines generischen Typs endet mit einem Backtick ( ` ), gefolgt von Ziffern, die die Anzahl der generischen Typargumente darstellen. Der Zweck dieses Namens-Manglings besteht darin, Compilern zu ermöglichen, generische Typen mit dem gleichen Namen, aber mit unterschiedlicher Anzahl von Typparametern zu unterstützen, die im selben Bereich auftreten. Die Reflektion gibt z. B. die abgeschrungenen Namen Tuple`1
und Tuple`2
aus den generischen Methoden und Tuple(Of T)
in Visual Basic oder und in Visual Tuple(Of T0, T1)
Tuple<T>
Tuple<T0, T1>
C# zurück.
Bei generischen Typen wird die Typargumentliste in Klammern eingeschlossen, und die Typargumente werden durch Kommas getrennt. Ein generischer verfügt beispielsweise Dictionary<TKey,TValue> über zwei Typparameter. Eine Dictionary<TKey,TValue> von MyType
mit Schlüsseln vom Typ kann wie folgt String dargestellt werden:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Um einen mit assemblyqualifizierten Typ in einer Typargumentliste anzugeben, schließen Sie den assemblyqualifizierten Typ in Klammern ein. Andernfalls werden die Kommas, die die Teile des durch die Assembly qualifizierten Namens trennen, als Trennzeichen für zusätzliche Typargumente interpretiert. Beispielsweise kann ein Dictionary<TKey,TValue> von aus MyAssembly.dll mit MyType
Schlüsseln vom Typ wie folgt angegeben String werden:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Hinweis
Ein durch eine Assembly qualifizierter Typ kann nur in Klammern eingeschlossen werden, wenn er in einer Typparameterliste angezeigt wird. Die Regeln zum Durchsuchen von Assemblys nach qualifizierten und nicht qualifizierten Typen in Typparameterlisten sind identisch mit den Regeln für qualifizierte und nicht qualifizierte nicht generische Typen.
Nullable-Typen sind ein Sonderfall generischer Typen. Ein Nullable-Wert wird beispielsweise Int32 durch die Zeichenfolge "System.Nullable'1[System.Int32]" dargestellt.
Hinweis
In C#, C++ und Visual Basic können Sie auch Typen abrufen, die NULL-Werte enthalten, indem Sie Typoperatoren verwenden. Beispielsweise wird der Boolean Nullable-Typ von typeof(Nullable<bool>)
in C#, von Nullable<Boolean>::typeid
in C++ und von in Visual Basic GetType(Nullable(Of Boolean))
zurückgegeben.
Die folgende Tabelle zeigt die Syntax, mit der Sie GetType
für verschiedene Typen verwenden.
So erhalten Sie | Verwendung |
---|---|
Ein NULL-Wert, der ZULÄSSIG IST Int32 | 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 Verweis auf MyType |
Type.GetType("MyType&") . Beachten Sie, dass Verweise im Gegensatz zu Zeigern auf eine Ebene beschränkt sind. |
Eine übergeordnete Klasse und eine geschachtelte Klasse | Type.GetType("MyParentClass+MyNestedClass") |
Ein eindimensionales Array mit einer Untergrenze von 0 | Type.GetType("MyArray[]") |
Ein eindimensionales Array mit einer unbekannten Untergrenze | Type.GetType("MyArray[*]") |
Ein n-dimensionales Array | Ein Komma (,) innerhalb der Klammern insgesamt n-1-mal. Stellt beispielsweise System.Object[,,] ein dreidimensionales Array Object dar. |
Array eines zweidimensionalen Arrays | Type.GetType("MyArray[][]") |
Ein rechteckiges zweidimensionales Array mit unbekannten unteren Begrenzungen | 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 assemblyqualifizierten Typargumenten | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Ein assemblyqualifizierter 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]]") |
Siehe auch
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Angeben vollständig gekennzeichneter Typnamen
Gilt für
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
Ruft den Typ mit dem angegebenen Namen ab und stellt optional benutzerdefinierte Methoden bereit, um die Assembly und den Typ aufzulösen.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type)) As Type
Parameter
- typeName
- String
Der Name des abzurufenden Typs. Wenn der typeResolver
-Parameter bereitgestellt wird, kann der Typname jede Zeichenfolge sein, die vom typeResolver
aufgelöst werden kann. Wenn der assemblyResolver
-Parameter bereitgestellt wird oder wenn die Standardtypauflösung verwendet wird, muss typeName
ein durch die Assembly qualifizierter Name (siehe AssemblyQualifiedName-Eigenschaft) sein, es sei denn, der Typ befindet sich in der gerade ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll. In diesem Fall genügt es, den von seinem Namespace qualifizierten Typnamen anzugeben.
- assemblyResolver
- Func<AssemblyName,Assembly>
Eine Methode, die die Assembly sucht und zurückgibt, die in typeName
angegeben wird. Der Assemblyname wird an den assemblyResolver
als ein AssemblyName-Objekt übergeben. Wenn typeName
keinen Namen einer Assembly enthält, wird der assemblyResolver
nicht aufgerufen. Wenn der assemblyResolver
nicht angegeben wird, wird die Standardassemblyauflösung ausgeführt.
Vorsicht Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern. Andernfalls könnten Berechtigungen für bösartigen Code erweitert werden. Verwenden Sie nur Methoden, die Sie bereitstellen oder mit denen Sie vertraut sind.
Eine Methode, die den Typ sucht und zurückgibt, der von typeName
von der Assembly angegeben wird, die vom assemblyResolver
oder von der Standardassemblyauflösung zurückgegeben wird. Wenn keine Assembly bereitgestellt wird, kann die typeResolver
-Methode eine Assembly zur Verfügung stellen. Die Methode nimmt auch einen Parameter an, der angibt, ob bei der Suche die Groß- und Kleinschreibung berücksichtigt werden soll; an diesen Parameter wird false
übergeben.
Vorsicht Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern.
Gibt zurück
Der Typ mit dem angegebenen Namen oder null
, wenn der Typ nicht gefunden wird.
Ausnahmen
typeName
ist null
.
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
Ein Fehler tritt auf, wenn typeName
in einen Typnamen und einen Assemblynamen zerlegt wird (wenn z. B. der einfache Typname ein Sonderzeichen ohne Escapezeichen enthält).
- oder -
typeName
stellt einen generischen Typ dar, der einen Zeigertyp, einen ByRef
-Typ oder Void als eines seiner Typargumente aufweist.
- oder -
typeName
stellt einen generischen Typ dar, der eine falsche Anzahl von Typargumenten aufweist.
- oder -
typeName
stellt einen generischen Typ dar, und eines seiner Typargumente erfüllt nicht die Einschränkungen für den entsprechenden Typparameter.
typeName
stellt ein Array von TypedReference dar.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
- oder -
typeName
enthält einen ungültigen Assemblynamen.
- oder -
typeName
ist ein gültiger Assemblyname ohne Typnamen.
Die Assembly oder eine der zugehörigen Abhängigkeiten ist ungültig.
- oder -
Die Assembly wurde mit einer Version der Common Language Runtime kompiliert, die höher ist als die Version, die derzeit geladen ist.
Hinweise
Verwendungsszenarien für diese Methode und Details zu den assemblyResolver
Parametern und typeResolver
finden Sie in der GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Methodenüberladung.
Hinweis
Wenn typeName
nicht gefunden werden kann, gibt der Aufruf der GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) -Methode null
zurück. Es wird keine Ausnahme ausgelöst. Um zu steuern, ob eine Ausnahme ausgelöst wird, rufen Sie eine Überladung der Methode GetType auf, die über einen -Parameter throwOnError
verfügt.
Das Aufrufen dieser Methodenüberladung ist identisch mit dem Aufrufen der GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Methodenüberladung und dem Angeben für die Parameter und false
throwOnError
ignoreCase
.
Gilt für
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
Ruft den Typ mit dem angegebenen Namen ab. Dabei wird angegeben, ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird, und optional werden benutzerdefinierte Methoden bereitgestellt, um die Assembly und den Typ aufzulösen.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean) As Type
Parameter
- typeName
- String
Der Name des abzurufenden Typs. Wenn der typeResolver
-Parameter bereitgestellt wird, kann der Typname jede Zeichenfolge sein, die vom typeResolver
aufgelöst werden kann. Wenn der assemblyResolver
-Parameter bereitgestellt wird oder wenn die Standardtypauflösung verwendet wird, muss typeName
ein durch die Assembly qualifizierter Name (siehe AssemblyQualifiedName-Eigenschaft) sein, es sei denn, der Typ befindet sich in der gerade ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll. In diesem Fall genügt es, den von seinem Namespace qualifizierten Typnamen anzugeben.
- assemblyResolver
- Func<AssemblyName,Assembly>
Eine Methode, die die Assembly sucht und zurückgibt, die in typeName
angegeben wird. Der Assemblyname wird an den assemblyResolver
als ein AssemblyName-Objekt übergeben. Wenn typeName
keinen Namen einer Assembly enthält, wird der assemblyResolver
nicht aufgerufen. Wenn der assemblyResolver
nicht angegeben wird, wird die Standardassemblyauflösung ausgeführt.
Vorsicht Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern. Andernfalls könnten Berechtigungen für bösartigen Code erweitert werden. Verwenden Sie nur Methoden, die Sie bereitstellen oder mit denen Sie vertraut sind.
Eine Methode, die den Typ sucht und zurückgibt, der von typeName
von der Assembly angegeben wird, die vom assemblyResolver
oder von der Standardassemblyauflösung zurückgegeben wird. Wenn keine Assembly bereitgestellt wird, kann die Methode eine Assembly zur Verfügung stellen. Die Methode nimmt auch einen Parameter an, der angibt, ob bei der Suche die Groß- und Kleinschreibung berücksichtigt werden soll; an diesen Parameter wird false
übergeben.
Vorsicht Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern.
- throwOnError
- Boolean
true
, damit eine Ausnahme ausgelöst wird, wenn der Typ nicht gefunden werden kann, false
, damit null
zurückgegeben wird. Die Angabe von false
unterdrückt auch einige andere Ausnahmebedingungen, aber nicht alle. Informationen finden Sie im Abschnitt für Ausnahmen.
Gibt zurück
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.
Ausnahmen
typeName
ist null
.
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
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.
Ein Fehler tritt auf, wenn typeName
in einen Typnamen und einen Assemblynamen zerlegt wird (wenn z. B. der einfache Typname ein Sonderzeichen ohne Escapezeichen enthält).
- oder -
throwOnError
ist true
und typeName
enthält ungültige Syntax (z. B. „MyType[,*,]“).
- oder -
typeName
stellt einen generischen Typ dar, der einen Zeigertyp, einen ByRef
-Typ oder Void als eines seiner Typargumente aufweist.
- oder -
typeName
stellt einen generischen Typ dar, der eine falsche Anzahl von Typargumenten aufweist.
- oder -
typeName
stellt einen generischen Typ dar, und eines seiner Typargumente erfüllt nicht die Einschränkungen für den entsprechenden Typparameter.
throwOnError
ist true
, und die Assembly oder eine der zugehörigen Abhängigkeiten wurde nicht gefunden.
- oder -
typeName
enthält einen ungültigen Assemblynamen.
- oder -
typeName
ist ein gültiger Assemblyname ohne Typnamen.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
Die Assembly oder eine der zugehörigen Abhängigkeiten ist ungültig.
- oder -
Die Assembly wurde mit einer Version der Common Language Runtime kompiliert, die höher ist als die Version, die derzeit geladen ist.
Hinweise
Verwendungsszenarien für diese Methode und Details zu den assemblyResolver
Parametern und typeResolver
finden Sie in der GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Methodenüberladung.
Das Aufrufen dieser Methodenüberladung ist identisch mit dem Aufrufen der GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Methodenüberladung und dem Angeben false
für den ignoreCase
-Parameter.
Gilt für
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
Ruft den Typ mit dem angegebenen Namen ab. Dabei wird angegeben, ob bei der Suche die Groß-/Kleinschreibung beachtet werden soll und ob eine Ausnahme ausgelöst werden soll, wenn der Typ nicht gefunden wird, und optional werden benutzerdefinierte Methoden bereitgestellt, um die Assembly und den Typ aufzulösen.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver, bool throwOnError, bool ignoreCase);
public static Type? GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError, bool ignoreCase);
public static Type GetType (string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly> assemblyResolver, Func<System.Reflection.Assembly,string,bool,Type> typeResolver, bool throwOnError, bool ignoreCase);
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
Public Shared Function GetType (typeName As String, assemblyResolver As Func(Of AssemblyName, Assembly), typeResolver As Func(Of Assembly, String, Boolean, Type), throwOnError As Boolean, ignoreCase As Boolean) As Type
Parameter
- typeName
- String
Der Name des abzurufenden Typs. Wenn der typeResolver
-Parameter bereitgestellt wird, kann der Typname jede Zeichenfolge sein, die vom typeResolver
aufgelöst werden kann. Wenn der assemblyResolver
-Parameter bereitgestellt wird oder wenn die Standardtypauflösung verwendet wird, muss typeName
ein durch die Assembly qualifizierter Name (siehe AssemblyQualifiedName-Eigenschaft) sein, es sei denn, der Typ befindet sich in der gerade ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll. In diesem Fall genügt es, den von seinem Namespace qualifizierten Typnamen anzugeben.
- assemblyResolver
- Func<AssemblyName,Assembly>
Eine Methode, die die Assembly sucht und zurückgibt, die in typeName
angegeben wird. Der Assemblyname wird an den assemblyResolver
als ein AssemblyName-Objekt übergeben. Wenn typeName
keinen Namen einer Assembly enthält, wird der assemblyResolver
nicht aufgerufen. Wenn der assemblyResolver
nicht angegeben wird, wird die Standardassemblyauflösung ausgeführt.
Vorsicht Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern. Andernfalls könnten Berechtigungen für bösartigen Code erweitert werden. Verwenden Sie nur Methoden, die Sie bereitstellen oder mit denen Sie vertraut sind.
Eine Methode, die den Typ sucht und zurückgibt, der von typeName
von der Assembly angegeben wird, die vom assemblyResolver
oder von der Standardassemblyauflösung zurückgegeben wird. Wenn keine Assembly bereitgestellt wird, kann die Methode eine Assembly zur Verfügung stellen. Die Methode nimmt auch einen Parameter an, der angibt, ob bei der Suche die Groß-/Kleinschreibung beachtet werden soll; an diesen Parameter wird der Wert von ignoreCase
übergeben.
Vorsicht Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern.
- throwOnError
- Boolean
true
, damit eine Ausnahme ausgelöst wird, wenn der Typ nicht gefunden werden kann, false
, damit null
zurückgegeben wird. Die Angabe von false
unterdrückt auch einige andere Ausnahmebedingungen, aber nicht alle. Informationen finden Sie im Abschnitt für Ausnahmen.
- ignoreCase
- Boolean
true
, um ohne Beachtung der Groß-/Kleinschreibung nach typeName
zu suchen, false
, um mit Beachtung der Groß-/Kleinschreibung nach typeName
zu suchen.
Gibt zurück
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.
Ausnahmen
typeName
ist null
.
Ein Klasseninitialisierer wird aufgerufen und löst eine Ausnahme aus.
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.
Ein Fehler tritt auf, wenn typeName
in einen Typnamen und einen Assemblynamen zerlegt wird (wenn z. B. der einfache Typname ein Sonderzeichen ohne Escapezeichen enthält).
- oder -
throwOnError
ist true
und typeName
enthält ungültige Syntax (z. B. „MyType[,*,]“).
- oder -
typeName
stellt einen generischen Typ dar, der einen Zeigertyp, einen ByRef
-Typ oder Void als eines seiner Typargumente aufweist.
- oder -
typeName
stellt einen generischen Typ dar, der eine falsche Anzahl von Typargumenten aufweist.
- oder -
typeName
stellt einen generischen Typ dar, und eines seiner Typargumente erfüllt nicht die Einschränkungen für den entsprechenden Typparameter.
throwOnError
ist true
, und die Assembly oder eine der zugehörigen Abhängigkeiten wurde nicht gefunden.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
- oder -
typeName
enthält einen ungültigen Assemblynamen.
- oder -
typeName
ist ein gültiger Assemblyname ohne Typnamen.
Die Assembly oder eine der zugehörigen Abhängigkeiten ist ungültig.
- oder -
Die Assembly wurde mit einer Version der Common Language Runtime kompiliert, die höher ist als die Version, die derzeit geladen ist.
Hinweise
Verwenden Sie diese Methodenüberladung und die zugehörigen Überladungen ( und ), um die Standardimplementierung der Methode durch GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) GetType flexiblere Implementierungen zu ersetzen. Indem Sie Eigene Methoden bereitstellen, die Typnamen und die Namen der Assemblys auflösen, die sie enthalten, können Sie folgende Schritte unternehmen:
Steuern Sie, aus welcher Version einer Assembly ein Typ geladen wird.
Stellen Sie einen anderen Ort für die Suche nach einem Typnamen ohne Assemblynamen zur Verfügung.
Laden von Assemblys mit partiellen Assemblynamen.
Gibt Unterklassen von System.Type zurück, die nicht von der Common Language Runtime (CLR) erstellt werden.
Bei der versionstoleranten Serialisierung ermöglicht ihnen diese Methode beispielsweise die Suche nach einer Assembly mit der besten Anpassung unter Verwendung eines partiellen Namens. Andere Überladungen der -Methode erfordern einen durch die GetType Assembly qualifizierten Typnamen, der die Versionsnummer enthält.
Alternative Implementierungen des Typsystems müssen möglicherweise Unterklassen von zurückgeben, die nicht von der CLR erstellt werden. Alle Typen, die von anderen Überladungen der -Methode zurückgegeben werden, sind System.Type GetType Laufzeittypen.
Hinweise zur Verwendung
Diese Methodenüberladung und die zugehörigen Überladungen analysieren in den Namen eines Typs und den Namen einer Assembly und lösen typeName
dann die Namen auf. Die Auflösung des Assemblynamens erfolgt vor der Auflösung des Typnamens, da ein Typname im Kontext einer Assembly aufgelöst werden muss.
Hinweis
Wenn Sie mit dem Konzept von assemblyqualifizierten Typnamen nicht vertraut sind, finden Sie weitere Informationen in der AssemblyQualifiedName -Eigenschaft.
Wenn typeName
kein durch die Assembly qualifizierter Name ist, wird die Assemblyauflösung übersprungen. Nicht qualifizierte Typnamen können im Kontext von mscorlib.dll/System.Private.CoreLib.dll oder der aktuell ausgeführten Assembly aufgelöst werden, oder Sie können optional eine Assembly im -Parameter typeResolver
bereitstellen. Die Auswirkungen des Ein- oder Auslassens des Assemblynamens für verschiedene Arten der Namensauflösung werden als Tabelle im Abschnitt Auflösung gemischter Namen angezeigt.
Allgemeine Nutzungshinweise:
Übergeben Sie Methoden nicht an
assemblyResolver
oder , wenn sie vontypeResolver
unbekannten oder nicht vertrauenswürdigen Aufrufern stammen. Verwenden Sie nur Methoden, die Sie bereitstellen oder mit denen Sie vertraut sind.Achtung
Die Verwendung von Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufern kann zu einer Erhöhung der Rechte für schädlichen Code führen.
Wenn Sie die Parameter und/oder weglassen, wird der Wert des Parameters an die Methoden übergeben,
assemblyResolver
typeResolver
die diethrowOnError
Standardauflösung ausführen.Wenn
throwOnError
true
ist, löst diese Methode eine TypeLoadException aus, wenntypeResolver
null
zurückgibt, und eine , FileNotFoundException wennassemblyResolver
null
zurückgibt.Diese Methode fängt keine Ausnahmen ab, die von und
assemblyResolver
ausgelösttypeResolver
werden. Sie sind für alle Ausnahmen verantwortlich, die von den Resolvermethoden ausgelöst werden.
Auflösen von Assemblys
Die assemblyResolver
-Methode empfängt ein -Objekt, das durch Analyse des Zeichenfolgen-Assemblynamens erzeugt AssemblyName wird, der in enthalten typeName
ist. Wenn typeName
keinen Assemblynamen enthält, assemblyResolver
wird nicht aufgerufen und an null
typeResolver
übergeben.
Wenn nicht angegeben wird, wird die Assembly mit der assemblyResolver
Standard-Assembly-Suche gefunden. Wenn angegeben wird, führt die -Methode keine Standard-Probe durch. In diesem Fall müssen Sie sicherstellen, dass alle Assemblys, die Sie an sie assemblyResolver
GetType assemblyResolver
übergeben, verarbeiten können.
Die assemblyResolver
-Methode sollte null
zurückgeben, wenn die Assembly nicht aufgelöst werden kann. Wenn zurückgibt, wird nicht aufgerufen, und es erfolgt keine weitere Verarbeitung. Wenn assemblyResolver
null
typeResolver
throwOnError
true
ist, FileNotFoundException wird außerdem eine ausgelöst.
Wenn der AssemblyName , der an übergeben assemblyResolver
wird, ein Teilname ist, ist mindestens einer der Teile null
. Wenn es z. B. keine Version hat, ist Version die -Eigenschaft null
. Wenn die Version -Eigenschaft, die -Eigenschaft und die -Methode zurückgeben, wurde nur der einfache CultureInfo Name der Assembly GetPublicKeyToken null
angegeben. Die assemblyResolver
-Methode kann alle Teile des Assemblynamens verwenden oder ignorieren.
Die Auswirkungen verschiedener Assemblyauflösungsoptionen werden als Tabelle im Abschnitt Auflösung gemischter Namen für einfache und assemblyqualifizierte Typnamen angezeigt.
Auflösen von Typen
Wenn typeName
keinen Assemblynamen an gibt, typeResolver
wird immer aufgerufen. Wenn typeName
einen Assemblynamen angibt, typeResolver
wird nur aufgerufen, wenn der Assemblyname erfolgreich aufgelöst wurde. Wenn assemblyResolver
oder standard assembly probeing zurückgibt, wird nicht null
typeResolver
aufgerufen.
Die typeResolver
-Methode empfängt drei Argumente:
Die zu durchsuchende Assembly
null
oder , wenn keinentypeName
Assemblynamen enthält.Der einfache Name des Typs. Bei einem geschachtelten Typ ist dies der äußerste enthaltende Typ. Bei einem generischen Typ ist dies der einfache Name des generischen Typs.
Ein boolescher Wert, der
true
ist, wenn die Schreibart von Typnamen ignoriert werden soll.
Die Implementierung bestimmt, wie diese Argumente verwendet werden. Die typeResolver
Methode sollte zurückgeben, wenn sie den Typ null
nicht auflösen kann. Wenn typeResolver
null
zurückgibt und throwOnError
true
ist, löst diese GetType Überladung von eine TypeLoadException aus.
Die Auswirkungen verschiedener Optionen für die Typauflösung werden als Tabelle im Abschnitt Mixed Name Resolution (Auflösung gemischter Namen) für einfache und assemblyqualifizierte Typnamen angezeigt.
Auflösen von geschachtelten Typen
Wenn typeName
ein geschachtelter Typ ist, wird nur der Name des äußersten enthaltenden Typs an typeResolver
übergeben. Wenn typeResolver
diesen Typ zurückgibt, wird die GetNestedType Methode rekursiv aufgerufen, bis der innerste geschachtelte Typ aufgelöst wurde.
Auflösen generischer Typen
GetTypewird rekursiv aufgerufen, um generische Typen aufzulösen: Zuerst, um den generischen Typ selbst aufzulösen, und dann, um seine Typargumente aufzulösen. Wenn ein Typargument generisch ist, GetType wird rekursiv aufgerufen, um seine Typargumente aufzulösen usw.
Die Kombination von assemblyResolver
und , die Sie typeResolver
bereitstellen, muss in der Lage sein, alle Ebenen dieser Rekursion aufzulösen. Angenommen, Sie stellen ein -Steuerelement zur assemblyResolver
Verfügung, das das Laden von MyAssembly
steuert. Angenommen, Sie möchten den generischen Typ Dictionary<string, MyType>
( Dictionary(Of String, MyType)
in Visual Basic) auflösen. Möglicherweise übergeben Sie den folgenden generischen Typnamen:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
Beachten Sie, dass MyType
das einzige assemblyqualifizierte Typargument ist. Die Namen der Dictionary<TKey,TValue> Klassen und sind nicht String assemblyqualifiziert. Muss typeResolver
entweder eine Assembly oder verarbeiten null
können, da sie für und empfängt. null
Dictionary<TKey,TValue> String Sie kann diesen Fall behandeln, indem sie eine Überladung der GetType Methode aufruft, die eine Zeichenfolge annimmt, da sich beide nicht qualifizierten Typnamen in mscorlib.dll/System.Private.CoreLib.dll befinden:
Type t = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore)
);
Die assemblyResolver
-Methode wird nicht für den Wörterbuchtyp und den Zeichenfolgentyp aufgerufen, da diese Typnamen nicht assemblyqualifiziert sind.
Angenommen, anstelle von System.String
ist der erste generische Argumenttyp , aus YourType
YourAssembly
:
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Da diese Assembly weder mscorlib.dll/System.Private.CoreLib.dll noch die aktuell ausgeführte Assembly ist, können Sie ohne einen durch die Assembly qualifizierten Namen nicht YourType
auflösen. Da ihr assemblyResolve
rekursiv aufgerufen wird, muss er diesen Fall behandeln können. Anstatt null
für andere Assemblys als MyAssembly
zurückzugeben, führt es jetzt eine Assemblyauslastung mithilfe des angegebenen AssemblyName -Objekts aus.
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
Zurück zu Nutzungshinweise.
Auflösen von Typnamen mit Sonderzeichen
Bestimmte Zeichen haben in assemblyqualifizierten Namen eine besondere Bedeutung. Wenn ein einfacher Typname diese Zeichen enthält, verursachen die Zeichen Analysefehler, wenn der einfache Name Teil eines durch die Assembly qualifizierten Namens ist. Um Analysefehler zu vermeiden, müssen Sie die Sonderzeichen mit einem umgekehrten Schrägstrich escapen, bevor Sie den durch die Assembly qualifizierten Namen an die Methode übergeben GetType können. Wenn ein Typ beispielsweise den Namen hat, Strange]Type
muss das Escapezeichen vor der eckigen Klammer wie folgt hinzugefügt werden: Strange\]Type
.
Hinweis
Namen mit solchen Sonderzeichen können nicht in Visual Basic oder C# erstellt werden, sondern mithilfe von Microsoft Intermediate Language (MSIL) oder durch Ausgeben dynamischer Assemblys.
In der folgenden Tabelle sind die Sonderzeichen für Typnamen aufgeführt.
Zeichen | Bedeutung |
---|---|
, (Komma) |
Trennzeichen für assemblyqualifizierte Namen. |
[] (eckige Klammern) |
Gibt als Suffixpaar einen Arraytyp an. schließt als Trennzeichenpaar generische Argumentlisten und assemblyqualifizierte Namen ein. |
& (kaufmännisches Und-Zeichen) |
Als Suffix gibt an, dass ein Typ ein Verweistyp ist. |
* (Sternchen) |
Als Suffix gibt an, dass ein Typ ein Zeigertyp ist. |
+ (plus) |
Trennzeichen für geschachtelte Typen. |
\ (umgekehrter Schrägstrich) |
Escapezeichen. |
Eigenschaften wie AssemblyQualifiedName z. B. geben zeichenfolgen mit ordnungsgemäßen Escapezeichen zurück. Sie müssen zeichenfolgen mit Escapezeichen ordnungsgemäß an die GetType -Methode übergeben. Im Gegenzug übergibt die GetType Methode ordnungsgemäß mit Escapezeichen beschriftete Namen an typeResolver
und an die Standardtypauflösungsmethoden. Wenn Sie einen Namen mit einem Namen ohne Escapezeichen in vergleichen typeResolver
müssen, müssen Sie die Escapezeichen entfernen.
Zurück zu Nutzungshinweise.
Auflösung gemischter Namen
In der folgenden Tabelle sind die Interaktionen zwischen , und der assemblyResolver
typeResolver
Standardnamensauflösung für alle Kombinationen aus Typname und Assemblyname in typeName
zusammengefasst:
Inhalt des Typnamens | Assembly resolver method (Assembly resolver-Methode) | Typ resolver-Methode | Ergebnis |
---|---|---|---|
type, assembly | NULL | NULL | Entspricht dem Aufrufen der Type.GetType(String, Boolean, Boolean) Methodenüberladung. |
type, assembly | bereitgestellt | NULL | assemblyResolver gibt die Assembly zurück oder gibt null zurück, wenn sie die Assembly nicht auflösen kann. Wenn die Assembly aufgelöst wird, wird die Assembly.GetType(String, Boolean, Boolean) Methodenüberladung verwendet, um den Typ aus der Assembly zu laden. Andernfalls wird nicht versucht, den Typ aufzulösen. |
type, assembly | NULL | bereitgestellt | Entspricht dem Konvertieren des Assemblynamens in ein AssemblyName -Objekt und dem Aufrufen der Assembly.Load(AssemblyName) Methodenüberladung zum Abrufen der Assembly. Wenn die Assembly aufgelöst wird, wird sie an typeResolver übergeben. Andernfalls typeResolver wird nicht aufgerufen, und es wird nicht versucht, den Typ aufzulösen. |
type, assembly | bereitgestellt | bereitgestellt | assemblyResolver gibt die Assembly zurück oder gibt null zurück, wenn sie die Assembly nicht auflösen kann. Wenn die Assembly aufgelöst wird, wird sie an typeResolver übergeben. Andernfalls typeResolver wird nicht aufgerufen, und es wird nicht versucht, den Typ aufzulösen. |
Typ | NULL, bereitgestellt | NULL | Entspricht dem Aufrufen der Type.GetType(String, Boolean, Boolean) Methodenüberladung. Da der Assemblyname nicht angegeben wird, werden nur mscorlib.dll/System.Private.CoreLib.dll und die aktuell ausgeführte Assembly durchsucht. Wenn assemblyResolver angegeben wird, wird es ignoriert. |
Typ | NULL, bereitgestellt | bereitgestellt | typeResolver wird aufgerufen und null für die Assembly übergeben. typeResolver kann einen Typ aus einer beliebigen Assembly bereitstellen, einschließlich Assemblys, die für den Zweck geladen werden. Wenn assemblyResolver angegeben wird, wird es ignoriert. |
Assembly | NULL, bereitgestellt | NULL, bereitgestellt | Eine FileLoadException wird ausgelöst, da der Assemblyname so analysiert wird, als ob es sich um einen durch eine Assembly qualifizierten Typnamen handelt. Dies führt zu einem ungültigen Assemblynamen. |
Zurück zu: Nutzungshinweise, Auflösen von Assemblys, Auflösen von Typen.