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(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. |
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)
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
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 angegeben wird oder die Standardtypauflösung verwendet wird, typeName
muss es sich um einen assemblyqualifizierten Namen handeln (siehe AssemblyQualifiedName), es sei denn, der Typ befindet sich in der derzeit ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll. In diesem Fall reicht es aus, den Typnamen anzugeben, der durch den Namespace qualifiziert ist.
- 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.
Achtung: Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufenden. 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.
Achtung: Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufenden.
- 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 ihrer Abhängigkeiten ist keine gültige Assembly für die derzeit geladene Runtime.
Hinweise
Weitere Informationen zu dieser API finden Sie unter Ergänzende API-Hinweise für Type.GetType.
Gilt für:
GetType()
- Quelle:
- Type.cs
- Quelle:
- Type.cs
- Quelle:
- Type.cs
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.
Weitere Informationen
Gilt für:
GetType(String)
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
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 derzeit ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll befindet, reicht es aus, den Typnamen anzugeben, der durch den Namespace qualifiziert ist.
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 einen ungültigen Typ dar, z. B. ein Array von TypedReference.
Die Assembly oder eine der zugehörigen Abhängigkeiten wurde gefunden, konnte aber nicht geladen werden.
Hinweis: In .NET für Windows Store-Apps oder der portablen Klassenbibliothek sollten Sie stattdessen die Basisklassen-Ausnahme IOExceptionabfangen.
Die Assembly ist für die derzeit geladene Runtime ungültig.
Beispiele
Im folgenden Beispiel wird der Typ von System.Int32
abgerufen, und dieses Typobjekt wird 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
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// 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 GetType -Methode verwenden, um ein Type Objekt für einen Typ in einer anderen Assembly abzurufen, wenn Sie dessen assemblyqualifizierten Namen kennen, der von AssemblyQualifiedNameabgerufen werden kann.
GetType verursacht das Laden der in typeName
angegebenen Assembly. Sie können eine Assembly auch mit der Assembly.Load -Methode laden und dann die Assembly.GetType -Methode oder Assembly.GetTypes verwenden, um Objekte abzurufen Type . Wenn sich ein Typ in einer Assembly befindet, die Ihrem Programm zur Kompilierzeit bekannt ist, ist die Verwendung typeof
in C# oder dem GetType
Operator in Visual Basic effizienter.
Hinweis
Wenn typeName
nicht gefunden werden kann, gibt der Aufruf der GetType(String) -Methode zurück null
. Es wird keine Ausnahme ausgelöst. Um zu steuern, ob eine Ausnahme ausgelöst wird, rufen Sie eine Überladung der -Methode auf, die GetType über einen throwOnError
-Parameter verfügt.
GetType funktioniert nur für Assemblys, die von einem Datenträger geladen werden. Wenn Sie aufrufen GetType , um einen Typ zu suchen, der in einer dynamischen Assembly definiert ist, die mithilfe der System.Reflection.Emit Dienste definiert wurde, erhalten Sie möglicherweise inkonsistentes Verhalten. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. h. mit dem RunAndSave
Zugriffsmodus oder Save
der System.Reflection.Emit.AssemblyBuilderAccess -Enumeration erstellt wird. Wenn die dynamische Assembly persistent ist und auf den Datenträger geschrieben wurde, bevor GetType
aufgerufen wird, findet das Ladeprogramm die gespeicherte Assembly auf dem Datenträger, lädt diese Assembly und ruft den Typ von dieser Assembly ab. Wenn die Assembly beim GetType
Aufruf nicht auf dem Datenträger gespeichert wurde, gibt die -Methode zurück null
.
GetType
versteht keine vorübergehenden dynamischen Assemblys; Daher gibt der Aufruf GetType
zum Abrufen eines Typs in einer vorübergehenden dynamischen Assembly zurück null
.
Um für ein dynamisches Modul zu verwenden GetType
, abonnieren Sie das AppDomain.AssemblyResolve Ereignis, und rufen Sie GetType
auf, bevor Sie speichern. Andernfalls erhalten Sie zwei Kopien der Assembly im Arbeitsspeicher.
Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Get
Methoden zurückgegeben werden, wenn sie 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 Name oder nach Name und Signatur ausblenden sein. |
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 abgeleitete Klasseneigenschaft 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 dann gesucht, wenn sie bereits in die Tabelle der verfügbaren Klassen geladen wurden.
typeName
kann der Typname sein, der durch seinen Namespace qualifiziert ist, oder ein assemblyqualifizierter Name, der eine Assemblynamensspezifikation 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 vollständigen oder teilweisen Assemblynamen qualifiziert 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 die Reflektion erstellt einen abgefragten Namen gemäß den folgenden Konventionen.
Hinweis
Die Prozessorarchitektur ist Teil der Assemblyidentität und kann als Teil von Assemblynamenzeichenfolgen angegeben werden. Beispiel: "ProcessorArchitecture=msil". Es ist jedoch aus Kompatibilitätsgründen nicht in der von der AssemblyQualifiedName -Eigenschaft zurückgegebenen Zeichenfolge enthalten. Sie können Auch Typen laden, indem Sie ein AssemblyName -Objekt erstellen 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 (') | Vorangestellt ist eine oder mehrere Ziffern, die die Anzahl der Typparameter darstellen, die sich am Ende des Namens eines generischen Typs befinden. |
Klammern ([]) | Schließen Sie eine generische Typargumentliste für einen konstruierten generischen Typ an. Schließen Sie einen assemblyqualifizierten Typ in eine Typargumentliste ein. |
Komma (,) | Vorangestellt ist der Assemblyname. |
Punkt (.) | Gibt Namespacebezeichner an. |
Pluszeichen (+) | Vor einer geschachtelten Klasse. |
Der vollqualifizierte Name für eine Klasse könnte beispielsweise wie folgt aussehen:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Wenn der Namespace TopNamespace.Sub+Namespace wäre, müsste die Zeichenfolge dem Pluszeichen (+) ein Escapezeichen (\) vorangestellt werden, 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 "\" zu "\\".
Dieser qualifizierte Name kann beibehalten und später zum Laden von Typeverwendet werden. Um nach zu suchen und zu laden, Typeverwenden Sie GetType entweder nur mit dem Typnamen oder mit dem assemblyqualifizierten Typnamen. GetType nur mit dem Typnamen wird in der Assembly des Aufrufers und dann in der Systemassembly nach Type dem gesucht. GetType mit dem qualifizierten Typnamen der Assembly sucht nach dem Type in jeder Assembly.
Typnamen können nachfolgende Zeichen enthalten, die zusätzliche Informationen zum Typ angeben, z. B. ob der Typ ein Verweistyp, ein Zeigertyp oder ein Arraytyp ist. Um den Typnamen ohne diese nachfolgenden Zeichen abzurufen, verwenden Sie t.GetElementType().ToString()
, wobei t
der Typ ist.
Leerzeichen sind in allen Typnamenskomponenten mit Ausnahme des Assemblynamens relevant. Im Assemblynamen sind Leerzeichen vor dem Trennzeichen "," relevant, aber Leerzeichen nach dem Trennzeichen "," werden ignoriert.
Der Name eines generischen Typs endet mit einem Backtick (') gefolgt von Ziffern, die die Anzahl generischer Typargumente darstellen. Der Zweck dieses Namensmanglings besteht darin, Compilern die Unterstützung generischer Typen mit demselben Namen, aber mit unterschiedlicher Anzahl von Typparametern zu ermöglichen, die im gleichen Bereich auftreten. Die Reflektion gibt beispielsweise die verwalteten Namen Tuple`1
und Tuple`2
aus den generischen Methoden Tuple(Of T)
und Tuple(Of T0, T1)
in Visual Basic oder Tuple<T>
und Tuple<T0, T1>
in Visual C# zurück.
Bei generischen Typen wird die Typargumentliste in Klammern eingeschlossen, und die Typargumente werden durch Kommas getrennt. Ein generischer Dictionary<TKey,TValue> Typ verfügt beispielsweise über zwei Typparameter. Ein Dictionary<TKey,TValue> mit MyType
Schlüsseln vom Typ String kann wie folgt dargestellt werden:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Um einen assemblyqualifizierten Typ in einer Typargumentliste anzugeben, schließen Sie den assemblyqualifizierten Typ in Klammern ein. Andernfalls werden die Kommas, die die Teile des assemblyqualifizierten Namens trennen, als Trennzeichen für zusätzliche Typargumente interpretiert. Beispielsweise kann ein Dictionary<TKey,TValue> fromMyAssembly.dll MyType
mit Schlüsseln vom Typ Stringwie folgt angegeben 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 generische Typen.
Typen, die Nullwerte zulassen, sind ein Sonderfall generischer Typen. Ein Nullable-Wert Int32 wird beispielsweise durch die Zeichenfolge "System.Nullable'1[System.Int32]" dargestellt.
Hinweis
In C#, C++ und Visual Basic können Sie auch Nullable-Typen mithilfe von Typoperatoren abrufen. Der Nullable-Typ Boolean wird beispielsweise von typeof(Nullable<bool>)
in C#, von Nullable<Boolean>::typeid
in C++ und von GetType(Nullable(Of Boolean))
in Visual Basic zurückgegeben.
Die folgende Tabelle zeigt die Syntax, die 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 unbekannter Untergrenze | Type.GetType("MyType[*]") |
Ein n-dimensionales Array | Ein Komma (,) in den Klammern ist insgesamt n-1 mal. Stellt beispielsweise System.Object[,,] ein dreidimensionales Object Array dar. |
Ein Array eindimensionaler Arrays | Type.GetType("MyType[][]") |
Ein rechteckiges zweidimensionales Array mit unbekannten Untergrenzen | 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 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]]") |
Weitere Informationen
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Specifying Fully Qualified Type Names (Angeben vollqualifizierter Typnamen)
Gilt für:
GetType(String, Boolean)
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
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 derzeit ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll befindet, reicht es aus, den Typnamen anzugeben, der durch den Namespace qualifiziert ist.
- 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: In .NET für Windows Store-Apps oder der portablen Klassenbibliothek sollten Sie stattdessen die Basisklassen-Ausnahme IOExceptionabfangen.
Die Assembly oder eine ihrer Abhängigkeiten ist für die derzeit geladene Runtime ungültig.
Beispiele
Im folgenden Beispiel wird der Typ von System.Int32
abgerufen, und dieses Typobjekt wird 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
open System
try
// Get the type of a specified class.
let myType1 = Type.GetType "System.Int32"
printfn $"The full name is {myType1.FullName}.\n"
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type System.Int32"
try
// Since NoneSuch does not exist in this assembly, GetType throws a TypeLoadException.
let myType2 = Type.GetType("NoneSuch", true)
printfn $"The full name is {myType2.FullName}."
with :? TypeLoadException as e ->
printfn $"{e.GetType().Name}: Unable to load type NoneSuch"
// 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 GetType -Methode verwenden, um ein Type Objekt für einen Typ in einer anderen Assembly abzurufen, wenn Sie dessen assemblyqualifizierten Namen kennen, der von AssemblyQualifiedNameabgerufen werden kann.
GetType verursacht das Laden der in typeName
angegebenen Assembly. Sie können eine Assembly auch mit der Assembly.Load -Methode laden und dann die Assembly.GetType -Methode oder Assembly.GetTypes verwenden, um Objekte abzurufen Type . Wenn sich ein Typ in einer Assembly befindet, die Ihrem Programm zur Kompilierzeit bekannt ist, ist die Verwendung typeof
in C# oder dem GetType
Operator in Visual Basic effizienter.
GetType
funktioniert nur für Assemblys, die von einem Datenträger geladen werden. Wenn Sie aufrufen GetType
, um einen Typ zu suchen, der in einer dynamischen Assembly definiert ist, die mithilfe der System.Reflection.Emit Dienste definiert wurde, erhalten Sie möglicherweise inkonsistentes Verhalten. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. h. mit dem RunAndSave
Zugriffsmodus oder Save
der System.Reflection.Emit.AssemblyBuilderAccess -Enumeration erstellt wird. Wenn die dynamische Assembly persistent ist und auf den Datenträger geschrieben wurde, bevor GetType
aufgerufen wird, findet das Ladeprogramm die gespeicherte Assembly auf dem Datenträger, lädt diese Assembly und ruft den Typ von dieser Assembly ab. Wenn die Assembly beim GetType
Aufruf nicht auf dem Datenträger gespeichert wurde, gibt die -Methode zurück null
.
GetType
versteht keine vorübergehenden dynamischen Assemblys; Daher gibt der Aufruf GetType
zum Abrufen eines Typs in einer vorübergehenden dynamischen Assembly zurück null
.
Um für ein dynamisches Modul zu verwenden GetType
, abonnieren Sie das AppDomain.AssemblyResolve Ereignis, und rufen Sie GetType
auf, bevor Sie speichern. 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 der Typ beispielsweise gefunden, aber nicht geladen werden kann, wird auch dann ein TypeLoadException ausgelöst, wenn throwOnError
ist false
.
Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Get
Methoden zurückgegeben werden, wenn sie 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 Name oder nach Name und Signatur ausblenden sein. |
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 abgeleitete Klasseneigenschaft 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 dann gesucht, wenn sie bereits in die Tabelle der verfügbaren Klassen geladen wurden.
typeName
kann der Typname sein, der durch seinen Namespace qualifiziert ist, oder ein assemblyqualifizierter Name, der eine Assemblynamensspezifikation enthält. Siehe AssemblyQualifiedName.
Wenn typeName
der Namespace, aber nicht der Assemblyname enthalten ist, durchsucht diese Methode nur die Assembly des aufrufenden Objekts und mscorlib.dll/System.Private.CoreLib.dll in dieser Reihenfolge. Wenn typeName mit dem namen der partiellen oder vollständigen Assembly voll qualifiziert 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 einen abgefragten Namen gemäß den folgenden Konventionen.
Hinweis
Die Prozessorarchitektur ist Teil der Assemblyidentität und kann als Teil von Assemblynamenzeichenfolgen angegeben werden. Beispiel: "ProcessorArchitecture=msil". Es ist jedoch aus Kompatibilitätsgründen nicht in der von der AssemblyQualifiedName -Eigenschaft zurückgegebenen Zeichenfolge enthalten. Sie können Typen auch laden, indem Sie ein AssemblyName -Objekt erstellen 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 (') | Vorangestellt eine oder mehrere Ziffern, die die Anzahl der Typparameter darstellen, die sich am Ende des Namens eines generischen Typs befinden. |
Klammern ([]) | Schließen Sie eine Argumentliste für generischen Typ für einen konstruierten generischen Typ ein. Schließen Sie in eine Typargumentliste einen assemblyqualifizierten Typ ein. |
Komma (,) | Geht dem Assemblynamen voran. |
Punkt (.) | Gibt Namespacebezeichner an. |
Pluszeichen (+) | Geht einer geschachtelten Klasse voran. |
Der vollqualifizierte Name für eine Klasse könnte beispielsweise wie folgt aussehen:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Wenn der Namespace TopNamespace.Sub+Namespace ist, müsste die Zeichenfolge dem Pluszeichen (+) ein Escapezeichen (\) vorangestellt werden, um zu verhindern, dass es als Schachtelungstrennzeichen interpretiert wird. Reflektion gibt diese Zeichenfolge wie folgt aus:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Ein "++" wird zu "\+\+" und aus "\" zu "\\".
Dieser qualifizierte Name kann beibehalten und später zum Laden von Typeverwendet werden. Um nach zu suchen und zu Typeladen, verwenden Sie GetType entweder nur mit dem Typnamen oder mit dem Namen des qualifizierten Assemblytyps. GetType mit dem Typnamen wird nur nach dem Type in der Assembly des Aufrufers und dann in der Systemassembly gesucht. GetType mit dem assemblyqualifizierten Typnamen sucht nach dem Type in jeder Assembly.
Typnamen können nachfolgende Zeichen enthalten, die zusätzliche Informationen zum Typ angeben, z. B. ob es sich bei dem Typ um einen Verweistyp, einen Zeigertyp oder einen Arraytyp handelt. Um den Typnamen ohne diese nachfolgenden Zeichen abzurufen, verwenden Sie t.GetElementType().ToString()
, wobei t
der Typ ist.
Leerzeichen sind in allen Typnamenkomponenten mit Ausnahme des Assemblynamens relevant. Im Assemblynamen sind Leerzeichen vor dem Trennzeichen ",", aber Leerzeichen nach dem Trennzeichen "," werden ignoriert.
Der Name eines generischen Typs endet mit einem Backtick (') gefolgt von Ziffern, die die Anzahl der generischen Typargumente darstellen. Der Zweck dieses Namens-Mangling besteht darin, Compilern zu ermöglichen, generische Typen mit dem gleichen Namen, aber mit unterschiedlicher Anzahl von Typparametern zu unterstützen, die im gleichen Bereich auftreten. Reflektion gibt beispielsweise die verwalteten Namen Tuple`1
und Tuple`2
von den generischen Methoden Tuple(Of T)
und Tuple(Of T0, T1)
in Visual Basic oder Tuple<T>
und Tuple<T0, T1>
in Visual C# zurück.
Bei generischen Typen wird die Typargumentliste in Klammern eingeschlossen, und die Typargumente werden durch Kommas getrennt. Ein generisches Dictionary<TKey,TValue> Beispiel verfügt über zwei Typparameter. Eine Dictionary<TKey,TValue> von MyType
mit Schlüsseln vom Typ String kann wie folgt dargestellt werden:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Um einen assemblyqualifizierten Typ in einer Typargumentliste anzugeben, schließen Sie den assemblyqualifizierten Typ in Klammern ein. Andernfalls werden die Kommas, die die Teile des assemblyqualifizierten Namens trennen, als Trennzeichen für zusätzliche Typargumente interpretiert. Beispielsweise kann ein Dictionary<TKey,TValue> von MyType
von MyAssembly.dll mit Schlüsseln vom Typ Stringwie folgt angegeben 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 nichtgenerische Typen.
Nullable-Typen sind ein Sonderfall generischer Typen. Ein NULLable-Wert Int32 wird beispielsweise durch die Zeichenfolge "System.Nullable'1[System.Int32]" dargestellt.
Hinweis
In C#, C++ und Visual Basic können Sie auch nullable-Typen mithilfe von Typoperatoren abrufen. Der Nullable-Typ Boolean wird beispielsweise von typeof(Nullable<bool>)
in C#, von Nullable<Boolean>::typeid
in C++ und von GetType(Nullable(Of Boolean))
in Visual Basic zurückgegeben.
Die folgende Tabelle zeigt die Syntax, die Sie für GetType
verschiedene Typen verwenden.
So erhalten Sie | Verwendung |
---|---|
Nullable 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 (,) in den 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 assemblyqualifizierter generischer Typ mit einem Argument für assemblyqualifizierten Typ | 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]]") |
Weitere Informationen
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Specifying Fully Qualified Type Names (Angeben vollqualifizierter Typnamen)
Gilt für:
GetType(String, Boolean, Boolean)
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
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 derzeit ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll befindet, reicht es aus, den Typnamen anzugeben, der durch den Namespace qualifiziert ist.
- 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 ist für die derzeit geladene Runtime ungültig.
Hinweise
Sie können die GetType -Methode verwenden, um ein Type Objekt für einen Typ in einer anderen Assembly abzurufen, wenn Sie dessen assemblyqualifizierten Namen kennen, der von AssemblyQualifiedNameabgerufen werden kann.
GetType verursacht das Laden der in typeName
angegebenen Assembly. Sie können eine Assembly auch mit der Assembly.Load -Methode laden und dann die Assembly.GetType -Methode oder Assembly.GetTypes verwenden, um Objekte abzurufen Type . Wenn sich ein Typ in einer Assembly befindet, die Ihrem Programm zur Kompilierzeit bekannt ist, ist die Verwendung typeof
in C# oder dem GetType
Operator in Visual Basic effizienter.
GetType
funktioniert nur für Assemblys, die von einem Datenträger geladen werden. Wenn Sie aufrufen GetType
, um einen Typ zu suchen, der in einer dynamischen Assembly definiert ist, die mithilfe der System.Reflection.Emit Dienste definiert wurde, erhalten Sie möglicherweise inkonsistentes Verhalten. Das Verhalten hängt davon ab, ob die dynamische Assembly persistent ist, d. h. mit dem RunAndSave
Zugriffsmodus oder Save
der System.Reflection.Emit.AssemblyBuilderAccess -Enumeration erstellt wird. Wenn die dynamische Assembly persistent ist und auf den Datenträger geschrieben wurde, bevor GetType
aufgerufen wird, findet das Ladeprogramm die gespeicherte Assembly auf dem Datenträger, lädt diese Assembly und ruft den Typ von dieser Assembly ab. Wenn die Assembly beim GetType
Aufruf nicht auf dem Datenträger gespeichert wurde, gibt die -Methode zurück null
.
GetType
versteht keine vorübergehenden dynamischen Assemblys; Daher gibt der Aufruf GetType
zum Abrufen eines Typs in einer vorübergehenden dynamischen Assembly zurück null
.
Um für ein dynamisches Modul zu verwenden GetType
, abonnieren Sie das AppDomain.AssemblyResolve Ereignis, und rufen Sie GetType
auf, bevor Sie speichern. 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 der Typ beispielsweise gefunden, aber nicht geladen werden kann, wird auch dann ein TypeLoadException ausgelöst, wenn throwOnError
ist false
.
Die folgende Tabelle zeigt, welche Member einer Basisklasse von den Get
Methoden zurückgegeben werden, wenn sie 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 Name oder nach Name und Signatur ausblenden sein. |
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 abgeleitete Klasseneigenschaft 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 dann gesucht, wenn sie bereits in die Tabelle der verfügbaren Klassen geladen wurden.
typeName
kann der Typname sein, der durch seinen Namespace qualifiziert ist, oder ein assemblyqualifizierter Name, der eine Assemblynamensspezifikation 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 vollständigen oder teilweisen Assemblynamen qualifiziert 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 der Typargumente. Alle Compiler, die die Common Language Runtime unterstützen, geben den einfachen Namen einer geschachtelten Klasse aus, und die Reflektion erstellt einen abgefragten Namen gemäß den folgenden Konventionen.
Hinweis
Die Prozessorarchitektur ist Teil der Assemblyidentität und kann als Teil von Assemblynamenzeichenfolgen angegeben werden. Beispiel: "ProcessorArchitecture=msil". Es ist jedoch aus Kompatibilitätsgründen nicht in der von der AssemblyQualifiedName -Eigenschaft zurückgegebenen Zeichenfolge enthalten. Sie können Auch Typen laden, indem Sie ein AssemblyName -Objekt erstellen 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 (') | Vorangestellt ist eine oder mehrere Ziffern, die die Anzahl der Typparameter darstellen, die sich am Ende des Namens eines generischen Typs befinden. |
Klammern ([]) | Schließen Sie eine generische Typargumentliste für einen konstruierten generischen Typ an. Schließen Sie einen assemblyqualifizierten Typ in eine Typargumentliste ein. |
Komma (,) | Vorangestellt ist der Assemblyname. |
Punkt (.) | Gibt Namespacebezeichner an. |
Pluszeichen (+) | Vor einer geschachtelten Klasse. |
Der vollqualifizierte Name für eine Klasse könnte beispielsweise wie folgt aussehen:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Wenn der Namespace TopNamespace.Sub+Namespace wäre, müsste die Zeichenfolge dem Pluszeichen (+) ein Escapezeichen (\) vorangestellt werden, 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 "\" zu "\\".
Dieser qualifizierte Name kann beibehalten und später zum Laden von Typeverwendet werden. Um nach zu suchen und zu laden, Typeverwenden Sie GetType entweder nur mit dem Typnamen oder mit dem assemblyqualifizierten Typnamen. GetType nur mit dem Typnamen wird in der Assembly des Aufrufers und dann in der Systemassembly nach Type dem gesucht. GetType mit dem qualifizierten Typnamen der Assembly sucht nach dem Type in jeder Assembly.
Typnamen können nachfolgende Zeichen enthalten, die zusätzliche Informationen zum Typ angeben, z. B. ob der Typ ein Verweistyp, ein Zeigertyp oder ein Arraytyp ist. Um den Typnamen ohne diese nachfolgenden Zeichen abzurufen, verwenden Sie t.GetElementType().ToString()
, wobei t
der Typ ist.
Leerzeichen sind in allen Typnamenskomponenten mit Ausnahme des Assemblynamens relevant. Im Assemblynamen sind Leerzeichen vor dem Trennzeichen "," relevant, aber Leerzeichen nach dem Trennzeichen "," werden ignoriert.
Der Name eines generischen Typs endet mit einem Backtick (') gefolgt von Ziffern, die die Anzahl generischer Typargumente darstellen. Der Zweck dieses Namensmanglings besteht darin, Compilern die Unterstützung generischer Typen mit demselben Namen, aber mit unterschiedlicher Anzahl von Typparametern zu ermöglichen, die im gleichen Bereich auftreten. Die Reflektion gibt beispielsweise die verwalteten Namen Tuple`1
und Tuple`2
aus den generischen Methoden Tuple(Of T)
und Tuple(Of T0, T1)
in Visual Basic oder Tuple<T>
und Tuple<T0, T1>
in Visual C# zurück.
Bei generischen Typen wird die Typargumentliste in Klammern eingeschlossen, und die Typargumente werden durch Kommas getrennt. Ein generischer Dictionary<TKey,TValue> Typ verfügt beispielsweise über zwei Typparameter. Ein Dictionary<TKey,TValue> mit MyType
Schlüsseln vom Typ String kann wie folgt dargestellt werden:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Um einen assemblyqualifizierten Typ in einer Typargumentliste anzugeben, schließen Sie den assemblyqualifizierten Typ in Klammern ein. Andernfalls werden die Kommas, die die Teile des assemblyqualifizierten Namens trennen, als Trennzeichen für zusätzliche Typargumente interpretiert. Beispielsweise kann ein Dictionary<TKey,TValue> von MyType
MyAssembly.dll mit Schlüsseln vom Typ Stringwie folgt angegeben 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 generische Typen.
Typen, die Nullwerte zulassen, sind ein Sonderfall generischer Typen. Ein Nullable-Wert Int32 wird beispielsweise durch die Zeichenfolge "System.Nullable'1[System.Int32]" dargestellt.
Hinweis
In C#, C++ und Visual Basic können Sie auch Nullable-Typen mithilfe von Typoperatoren abrufen. Der Nullable-Typ Boolean wird beispielsweise von typeof(Nullable<bool>)
in C#, von Nullable<Boolean>::typeid
in C++ und von GetType(Nullable(Of Boolean))
in Visual Basic zurückgegeben.
Die folgende Tabelle zeigt die Syntax, die 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("MyArray[]") |
Ein eindimensionales Array mit unbekannter Untergrenze | Type.GetType("MyArray[*]") |
Ein n-dimensionales Array | Ein Komma (,) in den Klammern ist 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 assemblyqualifizierter generischer 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]]") |
Weitere Informationen
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Specifying Fully Qualified Type Names (Angeben vollqualifizierter Typnamen)
Gilt für:
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
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 angegeben wird oder die Standardtypauflösung verwendet wird, typeName
muss es sich um einen assemblyqualifizierten Namen handeln (siehe AssemblyQualifiedName), es sei denn, der Typ befindet sich in der derzeit ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll. In diesem Fall reicht es aus, den Typnamen anzugeben, der durch den Namespace qualifiziert ist.
- 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.
Achtung: Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufenden. 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.
Achtung: Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufenden.
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 einen ungültigen Typ dar, z. B. ein Array von TypedReference.
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 ihrer Abhängigkeiten ist für die derzeit geladene Runtime ungültig.
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 zurück null
. Es wird keine Ausnahme ausgelöst. Um zu steuern, ob eine Ausnahme ausgelöst wird, rufen Sie eine Überladung der -Methode auf, die GetType über einen throwOnError
-Parameter verfügt.
Das Aufrufen dieser Methodenüberladung entspricht dem Aufrufen der GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) Methodenüberladung und dem Angeben false
für die throwOnError
Parameter und ignoreCase
.
Gilt für:
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
- Quelle:
- Type.CoreCLR.cs
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 angegeben wird oder die Standardtypauflösung verwendet wird, typeName
muss es sich um einen assemblyqualifizierten Namen handeln (siehe AssemblyQualifiedName), es sei denn, der Typ befindet sich in der derzeit ausgeführten Assembly oder in mscorlib.dll/System.Private.CoreLib.dll. In diesem Fall reicht es aus, den Typnamen anzugeben, der durch den Namespace qualifiziert ist.
- 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.
Achtung: Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufenden. 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.
Achtung: Übergeben Sie keine Methoden von unbekannten oder nicht vertrauenswürdigen Aufrufenden.
- 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 ihrer Abhängigkeiten ist für die derzeit geladene Runtime ungültig.
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 entspricht 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.