Type.GetType Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee haalt u een Type object op dat het opgegeven type vertegenwoordigt.
Overloads
| Name | Description |
|---|---|
| GetType() |
Haalt de huidige Typeop. |
| GetType(String) |
Hiermee haalt u de Type met de opgegeven naam op, waarbij een hoofdlettergevoelige zoekopdracht wordt uitgevoerd. |
| GetType(String, Boolean) |
Hiermee haalt u de Type met de opgegeven naam op, voert u een hoofdlettergevoelige zoekopdracht uit en geeft u op of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden. |
| GetType(String, Boolean, Boolean) |
Hiermee haalt u de Type met de opgegeven naam op, waarbij wordt opgegeven of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden en of een hoofdlettergevoelige zoekopdracht moet worden uitgevoerd. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Hiermee haalt u het type op met de opgegeven naam, optioneel aangepaste methoden opgeven om de assembly en het type op te lossen. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Hiermee wordt het type met de opgegeven naam opgevraagd, waarbij wordt opgegeven of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden, en eventueel aangepaste methoden opgeven om de assembly en het type op te lossen. |
| GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Hiermee haalt u het type op met de opgegeven naam, waarbij wordt opgegeven of u een hoofdlettergevoelige zoekopdracht wilt uitvoeren en of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden, en optioneel aangepaste methoden opgeven om de assembly en het type op te lossen. |
GetType()
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
- Bron:
- Type.cs
Haalt de huidige Typeop.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType();
override this.GetType : unit -> Type
Public Function GetType () As Type
Retouren
De huidige Type.
Implementeringen
Uitzonderingen
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
Zie ook
Van toepassing op
GetType(String)
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
Hiermee haalt u de Type met de opgegeven naam op, waarbij een hoofdlettergevoelige zoekopdracht wordt uitgevoerd.
public:
static Type ^ GetType(System::String ^ typeName);
public static Type GetType(string typeName);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName);
public static Type? GetType(string typeName);
static member GetType : string -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string -> Type
Public Shared Function GetType (typeName As String) As Type
Parameters
- typeName
- String
De assembly-gekwalificeerde naam van het type dat moet worden get. Zie AssemblyQualifiedName. Als het type zich in de momenteel uitgevoerde assembly of in mscorlib.dll/System.Private.CoreLib.dllbevindt, is het voldoende om de typenaam op te geven die is gekwalificeerd door de naamruimte.
Retouren
Het type met de opgegeven naam, indien gevonden; anders, null.
- Kenmerken
Uitzonderingen
typeName is null.
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
typeName vertegenwoordigt een algemeen type met een type aanwijzer, een ByRef type of Void als een van de bijbehorende typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type met een onjuist aantal typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type en een van de bijbehorende typeargumenten voldoet niet aan de beperkingen voor de bijbehorende typeparameter.
typeName vertegenwoordigt een ongeldig type, bijvoorbeeld een matrix van TypedReference.
De assembly of een van de bijbehorende afhankelijkheden is gevonden, maar kan niet worden geladen.
Opmerking: In .NET voor Windows Store-apps of de Portable Class Library, haalt u in plaats daarvan de uitzondering van de basisklasse op, IOException.
De assembly is niet geldig voor de momenteel geladen runtime.
Voorbeelden
In het volgende voorbeeld wordt het type opgehaald System.Int32 en gebruikt dat typeobject om de FullName eigenschap van System.Int32.
using System;
class GetTypeExample
{
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
Opmerkingen
U kunt de GetType methode gebruiken om een Type object op te halen voor een type in een andere assembly als u de naam kent die door de assembly is gekwalificeerd, die u kunt verkrijgen.AssemblyQualifiedName
GetType veroorzaakt het laden van de assembly die is opgegeven in typeName. U kunt ook een assembly laden met behulp van de Assembly.Load methode en vervolgens de Assembly.GetType of Assembly.GetTypes methode gebruiken om objecten op te halen Type . Als een type zich in een assembly bevindt die tijdens het compileren bekend is bij uw programma, is het efficiënter om typeof te gebruiken in C# of de operator GetType in Visual Basic.
Note
Als typeName deze niet kan worden gevonden, retourneert GetType(String)de aanroep van de null methode . Er wordt geen uitzondering gegenereerd. Als u wilt bepalen of er een uitzondering wordt gegenereerd, roept u een overbelasting aan van de GetType methode met een throwOnError parameter.
alleen .NET Framework: GetType werkt alleen op assembly's die vanaf de schijf zijn geladen. Als u aanroept GetType om een type op te zoeken dat is gedefinieerd in een dynamische assembly die is gedefinieerd met behulp van de System.Reflection.Emit services, krijgt u mogelijk inconsistent gedrag. Het gedrag is afhankelijk van of de dynamische assembly persistent is, dat wil gezegd, gemaakt met behulp van de RunAndSave of Save toegangsmodi van de System.Reflection.Emit.AssemblyBuilderAccess opsomming. Als de dynamische assembly persistent is en eerder naar de schijf GetType is geschreven, vindt het laadprogramma de opgeslagen assembly op schijf, laadt die assembly en haalt het type van die assembly op. Als de assembly niet is opgeslagen op schijf wanneer GetType deze wordt aangeroepen, retourneert nullde methode .
GetType begrijpt tijdelijke dynamische assembly's niet; daarom wordt aanroepen GetType om een type in een tijdelijke dynamische assembly op te halen, geretourneerd null.
Als u in .NET Framework GetType op een dynamische module wilt gebruiken, abonneert u zich op de gebeurtenis AppDomain.AssemblyResolve en roept u GetType aan voordat u opslaat. Anders krijgt u twee kopieën van de assembly in het geheugen.
In .NET Core 3.0 en hoger worden assemblybelastingen die door deze API worden geactiveerd, beïnvloed door de huidige waarde van AssemblyLoadContext.CurrentContextualReflectionContext.
In de volgende tabel ziet u welke leden van een basisklasse worden geretourneerd door de Get methoden bij het weergeven van een type.
| Lidmaatschapssoort | Static | Niet-statisch |
|---|---|---|
| Constructeur | No | No |
| Veld | No | Yes. Een veld wordt altijd verborgen op basis van naam en kenmerk. |
| Gebeurtenis | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
| Methode | No | Yes. Een methode (zowel virtueel als niet-virtueel) kan worden verborgen op basis van naam of op basis van naam en handtekening. |
| Geneste type | No | No |
| Vastgoed | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
Hide-by-name-and-signature beschouwt alle onderdelen van de handtekening, waaronder aangepaste modifiers, retourtypen, parametertypen, sentinels en onbeheerde aanroepconventies. Dit is een binaire vergelijking.
Voor reflectie worden eigenschappen en gebeurtenissen verborgen op basis van naam en signatuur. Als u een eigenschap hebt met zowel een get als een set accessor in de basisklasse, maar de afgeleide klasse alleen een get-accessor heeft, verbergt de eigenschap afgeleide klasse de eigenschap basisklasse en hebt u geen toegang tot de setter op de basisklasse.
Aangepaste kenmerken maken geen deel uit van het algemene typesysteem.
Matrices of COM-typen worden niet gezocht, tenzij ze al in de tabel met beschikbare klassen zijn geladen.
typeName kan de typenaam zijn die is gekwalificeerd door de naamruimte of een assembly-gekwalificeerde naam die een assemblynaamspecificatie bevat. Zie AssemblyQualifiedName.
Als typeName de naamruimte maar niet de assemblynaam bevat, zoekt deze methode alleen in de assembly van het aanroepende object en mscorlib.dll/System.Private.CoreLib.dll, in die volgorde. Als typeName volledig is gekwalificeerd met de gedeeltelijke of volledige assemblynaam, zoekt deze methode in de opgegeven assembly. Als de assembly een sterke naam heeft, is een volledige assemblynaam vereist.
De AssemblyQualifiedName eigenschap retourneert een volledig gekwalificeerde typenaam, inclusief geneste typen, de assemblynaam en algemene typeargumenten. Alle compilers die ondersteuning bieden voor de algemene taalruntime, verzenden de eenvoudige naam van een geneste klasse en weerspiegeling bouwt een mangled-naam wanneer een query wordt uitgevoerd, in overeenstemming met de volgende conventies.
Note
Processorarchitectuur maakt deel uit van de assembly-identiteit en kan worden opgegeven als onderdeel van assemblynaamtekenreeksen. Bijvoorbeeld 'ProcessorArchitecture=msil'. Het is echter niet opgenomen in de tekenreeks die door de AssemblyQualifiedName eigenschap wordt geretourneerd om compatibiliteitsredenen. U kunt ook typen laden door een AssemblyName object te maken en door te geven aan een juiste overbelasting van de Load methode. Vervolgens kunt u de Assembly.GetType methode gebruiken om typen uit de assembly te laden. Zie ook AssemblyName.ProcessorArchitecture.
| Scheidingsteken | Meaning |
|---|---|
| Backslash (\) | Escape-teken. |
| Backtick (') | Gaat vooraf aan een of meer cijfers die het aantal parameters van het type vertegenwoordigen, dat zich aan het einde van de naam van een algemeen type bevindt. |
| Vierkante haken ([]) | Plaats een lijst met algemene typeargumenten voor een samengesteld algemeen type; plaats binnen een lijst met typeargumenten een assembly-gekwalificeerde type. |
| Komma (,) | Gaat vooraf aan de assemblynaam. |
| Punt (.) | Geeft de naamruimte-id's aan. |
| Plusteken (+) | Gaat vooraf aan een geneste klasse. |
De volledig gekwalificeerde naam voor een klasse kan er bijvoorbeeld als volgt uitzien:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Als de naamruimte TopNamespace.Sub+Naamruimte was, moet de tekenreeks voorafgaan aan het plusteken (+) met een escapeteken (\) om te voorkomen dat deze wordt geïnterpreteerd als een nestscheidingsteken. Weerspiegeling verzendt deze tekenreeks als volgt:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Een "++" wordt "\+\+" en een "\" wordt "\\".
Deze gekwalificeerde naam kan worden behouden en later worden gebruikt om de Type. Als u een Typewilt zoeken en laden, gebruikt GetType u deze alleen met de typenaam of met de naam van het gekwalificeerde assembly-type. GetType met de typenaam wordt alleen gezocht naar de Type assembly van de aanroeper en vervolgens in de systeemassembly. GetType met de naam van het gekwalificeerde type assembly zoekt u naar de Type in elke assembly.
Typenamen kunnen volgtekens bevatten die aanvullende informatie over het type aangeven, zoals of het type een verwijzingstype, een aanwijzer of een matrixtype is. Als u de typenaam zonder deze volgtekens wilt ophalen, gebruikt t.GetElementType().ToString()u , waar t is het type.
Spaties zijn relevant voor alle typenaamonderdelen, behalve de assemblynaam. In de assemblynaam zijn spaties vóór het scheidingsteken ',' relevant, maar spaties na het scheidingsteken ',' worden genegeerd.
De naam van een algemeen type eindigt met een backtick (') gevolgd door cijfers die het aantal algemene typeargumenten vertegenwoordigen. Het doel van deze naambeheer is om compilers toe te staan algemene typen te ondersteunen met dezelfde naam, maar met verschillende getallen van typeparameters, die zich in hetzelfde bereik voordoen. Weerspiegeling retourneert bijvoorbeeld de namen Tuple`1 en Tuple`2 van de algemene methoden Tuple(Of T) en Tuple(Of T0, T1) in Visual Basic, of Tuple<T> en Tuple<T0, T1> in Visual C#.
Voor algemene typen wordt de lijst met typeargumenten tussen vierkante haken geplaatst en worden de typeargumenten gescheiden door komma's. Een algemeen Dictionary<TKey,TValue> heeft bijvoorbeeld twee typeparameters. Een Dictionary<TKey,TValue> van MyType de sleutels van het type String kan als volgt worden weergegeven:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Als u een type-gekwalificeerde type in een lijst met typeargumenten wilt opgeven, plaatst u het type met gekwalificeerde assembly's tussen vierkante haken. Anders worden de komma's die de onderdelen van de assembly-gekwalificeerde naam scheiden geïnterpreteerd als het scheiden van aanvullende typeargumenten. Een van Dictionary<TKey,TValue> fromMyAssembly.dll, met sleutels van het typeMyType, kan bijvoorbeeld String als volgt worden opgegeven:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Een assembly-gekwalificeerde type kan alleen tussen vierkante haken worden geplaatst wanneer het binnen een typeparameterlijst wordt weergegeven. De regels voor het zoeken naar assembly's voor gekwalificeerde en niet-gekwalificeerde typen in typeparameterlijsten zijn hetzelfde als de regels voor gekwalificeerde en niet-gekwalificeerde niet-gegenereerde typen.
Null-typen zijn een speciaal geval van algemene typen. Een null-waarde Int32 wordt bijvoorbeeld vertegenwoordigd door de tekenreeks System.Nullable'1[System.Int32].
Note
U kunt ook null-typen ophalen met behulp van typeoperators. Het type nullable Boolean wordt bijvoorbeeld geretourneerd door typeof(Nullable<bool>) in C# en door GetType(Nullable(Of Boolean)) in Visual Basic.
In de volgende tabel ziet u de syntaxis waarmee GetType u voor verschillende typen gebruikmaakt.
| Ophalen | Gebruik |
|---|---|
| Een null-waarde Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Een onbeheerde aanwijzer naar MyType |
Type.GetType("MyType*") |
Een onbeheerde aanwijzer naar een aanwijzer MyType |
Type.GetType("MyType**") |
Een beheerde aanwijzer of verwijzing naar MyType |
Type.GetType("MyType&"). In tegenstelling tot verwijzingen zijn verwijzingen beperkt tot één niveau. |
| Een bovenliggende klasse en een geneste klasse | Type.GetType("MyParentClass+MyNestedClass") |
| Een eendimensionale matrix met een ondergrens van 0 | Type.GetType("MyType[]") |
| Een eendimensionale matrix met een onbekende ondergrens | Type.GetType("MyType[*]") |
| Een n-dimensionale matrix | Een komma (,) tussen de haakjes een totaal van n-1 keer. Vertegenwoordigt bijvoorbeeld System.Object[,,] een driedimensionale Object matrix. |
| Een matrix van eendimensionale matrices | Type.GetType("MyType[][]") |
| Een rechthoekige tweedimensionale matrix met onbekende ondergrenzen | Type.GetType("MyType[,]") |
| Een algemeen type met één typeargument | Type.GetType("MyGenericType`1[MyType]") |
| Een algemeen type met twee typeargumenten | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Een algemeen type met twee assembly-gekwalificeerde typeargumenten | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Een algemeen type dat is gekwalificeerd voor assembly's met een argument van het type assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Een algemeen type waarvan het typeargument een algemeen type is met twee typeargumenten | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Zie ook
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Volledig gekwalificeerde typenamen opgeven
Van toepassing op
GetType(String, Boolean)
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
Hiermee haalt u de Type met de opgegeven naam op, voert u een hoofdlettergevoelige zoekopdracht uit en geeft u op of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError);
public static Type GetType(string typeName, bool throwOnError);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
public static Type? GetType(string typeName, bool throwOnError);
public static Type? GetType(string typeName, bool throwOnError);
static member GetType : string * bool -> Type
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean) As Type
Parameters
- typeName
- String
De assembly-gekwalificeerde naam van het type dat moet worden get. Zie AssemblyQualifiedName. Als het type zich in de momenteel uitgevoerde assembly of in mscorlib.dll/System.Private.CoreLib.dllbevindt, is het voldoende om de typenaam op te geven die is gekwalificeerd door de naamruimte.
- throwOnError
- Boolean
true om een uitzondering te genereren als het type niet kan worden gevonden; false om terug te keren null.
false Als u opgeeft, worden ook enkele andere uitzonderingsvoorwaarden onderdrukt, maar niet allemaal. Zie de sectie Uitzonderingen.
Retouren
Het type met de opgegeven naam. Als het type niet wordt gevonden, geeft de throwOnError parameter aan of null deze wordt geretourneerd of er een uitzondering wordt gegenereerd. In sommige gevallen wordt er een uitzondering gegenereerd, ongeacht de waarde van throwOnError. Zie de sectie Uitzonderingen.
- Kenmerken
Uitzonderingen
typeName is null.
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
throwOnError is true en het type is niet gevonden.
– of –
throwOnError is true en typeName bevat ongeldige tekens, zoals een ingesloten tabblad.
– of –
throwOnError is true en typeName is een lege tekenreeks.
– of –
throwOnError is true en typeName vertegenwoordigt een matrixtype met een ongeldige grootte.
– of –
typeName vertegenwoordigt een matrix van TypedReference.
throwOnError is true en typeName bevat ongeldige syntaxis. Bijvoorbeeld 'MyType[,*,]'.
– of –
typeName vertegenwoordigt een algemeen type met een type aanwijzer, een ByRef type of Void als een van de bijbehorende typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type met een onjuist aantal typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type en een van de bijbehorende typeargumenten voldoet niet aan de beperkingen voor de bijbehorende typeparameter.
throwOnError is true en de assembly of een van de bijbehorende afhankelijkheden is niet gevonden.
De assembly of een van de bijbehorende afhankelijkheden is gevonden, maar kan niet worden geladen.
Opmerking: In .NET voor Windows Store-apps of de Portable Class Library, haalt u in plaats daarvan de uitzondering van de basisklasse op, IOException.
De assembly of een van de afhankelijkheden is niet geldig voor de momenteel geladen runtime.
Voorbeelden
In het volgende voorbeeld wordt het type opgehaald System.Int32 en gebruikt dat typeobject om de FullName eigenschap van System.Int32. Als een typeobject verwijst naar een assembly die niet bestaat, genereert dit voorbeeld een uitzondering.
using System;
class GetTypeExample
{
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
Opmerkingen
U kunt de GetType methode gebruiken om een Type object op te halen voor een type in een andere assembly als u de naam kent die door de assembly is gekwalificeerd, die u kunt verkrijgen.AssemblyQualifiedName
GetType veroorzaakt het laden van de assembly die is opgegeven in typeName. U kunt ook een assembly laden met behulp van de Assembly.Load methode en vervolgens de Assembly.GetType of Assembly.GetTypes methode gebruiken om objecten op te halen Type . Als een type zich in een assembly bevindt die tijdens het compileren bekend is bij uw programma, is het efficiënter om typeof te gebruiken in C# of de operator GetType in Visual Basic.
alleen .NET Framework: GetType werkt alleen op assembly's die vanaf de schijf zijn geladen. Als u aanroept GetType om een type op te zoeken dat is gedefinieerd in een dynamische assembly die is gedefinieerd met behulp van de System.Reflection.Emit services, krijgt u mogelijk inconsistent gedrag. Het gedrag is afhankelijk van of de dynamische assembly persistent is, dat wil gezegd, gemaakt met behulp van de RunAndSave of Save toegangsmodi van de System.Reflection.Emit.AssemblyBuilderAccess opsomming. Als de dynamische assembly persistent is en eerder naar de schijf GetType is geschreven, vindt het laadprogramma de opgeslagen assembly op schijf, laadt die assembly en haalt het type van die assembly op. Als de assembly niet is opgeslagen op schijf wanneer GetType deze wordt aangeroepen, retourneert nullde methode .
GetType begrijpt tijdelijke dynamische assembly's niet; daarom wordt aanroepen GetType om een type in een tijdelijke dynamische assembly op te halen, geretourneerd null.
Als u in .NET Framework GetType op een dynamische module wilt gebruiken, abonneert u zich op de gebeurtenis AppDomain.AssemblyResolve en roept u GetType aan voordat u opslaat. Anders krijgt u twee kopieën van de assembly in het geheugen.
In .NET Core 3.0 en hoger worden assemblybelastingen die door deze API worden geactiveerd, beïnvloed door de huidige waarde van AssemblyLoadContext.CurrentContextualReflectionContext.
De throwOnError parameter geeft aan wat er gebeurt wanneer het type niet wordt gevonden en onderdrukt ook bepaalde andere uitzonderingsvoorwaarden, zoals beschreven in de sectie Uitzonderingen. Sommige uitzonderingen worden gegenereerd, ongeacht de waarde van throwOnError. Als het type bijvoorbeeld wordt gevonden maar niet kan worden geladen, wordt er een TypeLoadException gegenereerd, zelfs als throwOnError dat het is false.
In de volgende tabel ziet u welke leden van een basisklasse worden geretourneerd door de Get methoden bij het weergeven van een type.
| Lidmaatschapssoort | Static | Niet-statisch |
|---|---|---|
| Constructeur | No | No |
| Veld | No | Yes. Een veld wordt altijd verborgen op basis van naam en kenmerk. |
| Gebeurtenis | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
| Methode | No | Yes. Een methode (zowel virtueel als niet-virtueel) kan worden verborgen op basis van naam of op basis van naam en handtekening. |
| Geneste type | No | No |
| Vastgoed | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
Hide-by-name-and-signature beschouwt alle onderdelen van de handtekening, waaronder aangepaste modifiers, retourtypen, parametertypen, sentinels en onbeheerde aanroepconventies. Dit is een binaire vergelijking.
Voor reflectie worden eigenschappen en gebeurtenissen verborgen op basis van naam en signatuur. Als u een eigenschap hebt met zowel een get als een set accessor in de basisklasse, maar de afgeleide klasse alleen een get-accessor heeft, verbergt de eigenschap afgeleide klasse de eigenschap basisklasse en hebt u geen toegang tot de setter op de basisklasse.
Aangepaste kenmerken maken geen deel uit van het algemene typesysteem.
Matrices of COM-typen worden niet gezocht, tenzij ze al in de tabel met beschikbare klassen zijn geladen.
typeName kan de typenaam zijn die is gekwalificeerd door de naamruimte of een assembly-gekwalificeerde naam die een assemblynaamspecificatie bevat. Zie AssemblyQualifiedName.
Als typeName de naamruimte maar niet de assemblynaam bevat, zoekt deze methode alleen in de assembly van het aanroepende object en mscorlib.dll/System.Private.CoreLib.dll, in die volgorde. Als typeName volledig is gekwalificeerd met de gedeeltelijke of volledige assemblynaam, zoekt deze methode in de opgegeven assembly. Als de assembly een sterke naam heeft, is een volledige assemblynaam vereist.
De AssemblyQualifiedName eigenschap retourneert een volledig gekwalificeerde typenaam, inclusief geneste typen, de assemblynaam en algemene argumenten. Alle compilers die ondersteuning bieden voor de algemene taalruntime, verzenden de eenvoudige naam van een geneste klasse en weerspiegeling bouwt een mangled-naam wanneer een query wordt uitgevoerd, in overeenstemming met de volgende conventies.
Note
Processorarchitectuur maakt deel uit van de assembly-identiteit en kan worden opgegeven als onderdeel van assemblynaamtekenreeksen. Bijvoorbeeld 'ProcessorArchitecture=msil'. Het is echter niet opgenomen in de tekenreeks die door de AssemblyQualifiedName eigenschap wordt geretourneerd om compatibiliteitsredenen. U kunt ook typen laden door een AssemblyName object te maken en door te geven aan een juiste overbelasting van de Load methode. Vervolgens kunt u de Assembly.GetType methode gebruiken om typen uit de assembly te laden. Zie ook AssemblyName.ProcessorArchitecture.
| Scheidingsteken | Meaning |
|---|---|
| Backslash (\) | Escape-teken. |
| Backtick (') | Gaat vooraf aan een of meer cijfers die het aantal parameters van het type vertegenwoordigen, dat zich aan het einde van de naam van een algemeen type bevindt. |
| Vierkante haken ([]) | Plaats een lijst met algemene typeargumenten voor een samengesteld algemeen type; plaats binnen een lijst met typeargumenten een assembly-gekwalificeerde type. |
| Komma (,) | Gaat vooraf aan de assemblynaam. |
| Punt (.) | Geeft de naamruimte-id's aan. |
| Plusteken (+) | Gaat vooraf aan een geneste klasse. |
De volledig gekwalificeerde naam voor een klasse kan er bijvoorbeeld als volgt uitzien:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Als de naamruimte TopNamespace.Sub+Naamruimte was, moet de tekenreeks voorafgaan aan het plusteken (+) met een escapeteken (\) om te voorkomen dat deze wordt geïnterpreteerd als een nestscheidingsteken. Weerspiegeling verzendt deze tekenreeks als volgt:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Een "++" wordt "\+\+" en een "\" wordt "\\".
Deze gekwalificeerde naam kan worden behouden en later worden gebruikt om de Type. Als u een Typewilt zoeken en laden, gebruikt GetType u deze alleen met de typenaam of met de naam van het gekwalificeerde assembly-type. GetType met de typenaam wordt alleen gezocht naar de Type assembly van de aanroeper en vervolgens in de systeemassembly. GetType met de naam van het gekwalificeerde type assembly zoekt u naar de Type in elke assembly.
Typenamen kunnen volgtekens bevatten die aanvullende informatie over het type aangeven, zoals of het type een verwijzingstype, een aanwijzer of een matrixtype is. Als u de typenaam zonder deze volgtekens wilt ophalen, gebruikt t.GetElementType().ToString()u , waar t is het type.
Spaties zijn relevant voor alle typenaamonderdelen, behalve de assemblynaam. In de assemblynaam zijn spaties vóór het scheidingsteken ',' relevant, maar spaties na het scheidingsteken ',' worden genegeerd.
De naam van een algemeen type eindigt met een backtick (') gevolgd door cijfers die het aantal algemene typeargumenten vertegenwoordigen. Het doel van deze naambeheer is om compilers toe te staan algemene typen te ondersteunen met dezelfde naam, maar met verschillende getallen van typeparameters, die zich in hetzelfde bereik voordoen. Weerspiegeling retourneert bijvoorbeeld de namen Tuple`1 en Tuple`2 van de algemene methoden Tuple(Of T) en Tuple(Of T0, T1) in Visual Basic, of Tuple<T> en Tuple<T0, T1> in Visual C#.
Voor algemene typen wordt de lijst met typeargumenten tussen vierkante haken geplaatst en worden de typeargumenten gescheiden door komma's. Een algemeen Dictionary<TKey,TValue> heeft bijvoorbeeld twee typeparameters. Een Dictionary<TKey,TValue> van MyType de sleutels van het type String kan als volgt worden weergegeven:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Als u een type-gekwalificeerde type in een lijst met typeargumenten wilt opgeven, plaatst u het type met gekwalificeerde assembly's tussen vierkante haken. Anders worden de komma's die de onderdelen van de assembly-gekwalificeerde naam scheiden geïnterpreteerd als het scheiden van aanvullende typeargumenten. Een van Dictionary<TKey,TValue> MyAssembly.dll, met sleutels van het typeMyType, kan bijvoorbeeld String als volgt worden opgegeven:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Een assembly-gekwalificeerde type kan alleen tussen vierkante haken worden geplaatst wanneer het binnen een typeparameterlijst wordt weergegeven. De regels voor het zoeken naar assembly's voor gekwalificeerde en niet-gekwalificeerde typen in typeparameterlijsten zijn hetzelfde als de regels voor gekwalificeerde en niet-gekwalificeerde niet-gegenereerde typen.
Null-typen zijn een speciaal geval van algemene typen. Een null-waarde Int32 wordt bijvoorbeeld vertegenwoordigd door de tekenreeks System.Nullable'1[System.Int32].
Note
U kunt ook null-typen ophalen met behulp van typeoperators. Het type nullable Boolean wordt bijvoorbeeld geretourneerd door typeof(Nullable<bool>) in C# en door GetType(Nullable(Of Boolean)) in Visual Basic.
In de volgende tabel ziet u de syntaxis waarmee GetType u voor verschillende typen gebruikmaakt.
| Ophalen | Gebruik |
|---|---|
| Een null-waarde Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Een onbeheerde aanwijzer naar MyType |
Type.GetType("MyType*") |
Een onbeheerde aanwijzer naar een aanwijzer MyType |
Type.GetType("MyType**") |
Een beheerde aanwijzer of verwijzing naar MyType |
Type.GetType("MyType&"). In tegenstelling tot verwijzingen zijn verwijzingen beperkt tot één niveau. |
| Een bovenliggende klasse en een geneste klasse | Type.GetType("MyParentClass+MyNestedClass") |
| Een eendimensionale matrix met een ondergrens van 0 | Type.GetType("MyArray[]") |
| Een eendimensionale matrix met een onbekende ondergrens | Type.GetType("MyArray[*]") |
| Een n-dimensionale matrix | Een komma (,) tussen de haakjes een totaal van n-1 keer. Vertegenwoordigt bijvoorbeeld System.Object[,,] een driedimensionale Object matrix. |
| De matrix van een tweedimensionale matrix | Type.GetType("MyArray[][]") |
| Een rechthoekige tweedimensionale matrix met onbekende ondergrenzen | Type.GetType("MyArray[,]") |
| Een algemeen type met één typeargument | Type.GetType("MyGenericType`1[MyType]") |
| Een algemeen type met twee typeargumenten | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Een algemeen type met twee assembly-gekwalificeerde typeargumenten | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Een algemeen type dat is gekwalificeerd voor assembly's met een argument van het type assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Een algemeen type waarvan het typeargument een algemeen type is met twee typeargumenten | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Zie ook
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Volledig gekwalificeerde typenamen opgeven
Van toepassing op
GetType(String, Boolean, Boolean)
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
Hiermee haalt u de Type met de opgegeven naam op, waarbij wordt opgegeven of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden en of een hoofdlettergevoelige zoekopdracht moet worden uitgevoerd.
public:
static Type ^ GetType(System::String ^ typeName, bool throwOnError, bool ignoreCase);
public static Type GetType(string typeName, bool throwOnError, bool ignoreCase);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * bool * bool -> Type
Public Shared Function GetType (typeName As String, throwOnError As Boolean, ignoreCase As Boolean) As Type
Parameters
- typeName
- String
De assembly-gekwalificeerde naam van het type dat moet worden get. Zie AssemblyQualifiedName. Als het type zich in de momenteel uitgevoerde assembly of in mscorlib.dll/System.Private.CoreLib.dllbevindt, is het voldoende om de typenaam op te geven die is gekwalificeerd door de naamruimte.
- throwOnError
- Boolean
true om een uitzondering te genereren als het type niet kan worden gevonden; false om terug te keren null.
false Als u opgeeft, worden ook enkele andere uitzonderingsvoorwaarden onderdrukt, maar niet allemaal. Zie de sectie Uitzonderingen.
- ignoreCase
- Boolean
trueom een hoofdlettergevoelige zoekopdracht uit te voeren om typeName een hoofdlettergevoelige zoekopdracht falsetypeNameuit te voeren.
Retouren
Het type met de opgegeven naam. Als het type niet wordt gevonden, geeft de throwOnError parameter aan of null deze wordt geretourneerd of er een uitzondering wordt gegenereerd. In sommige gevallen wordt er een uitzondering gegenereerd, ongeacht de waarde van throwOnError. Zie de sectie Uitzonderingen.
- Kenmerken
Uitzonderingen
typeName is null.
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
throwOnError is true en het type is niet gevonden.
– of –
throwOnError is true en typeName bevat ongeldige tekens, zoals een ingesloten tabblad.
– of –
throwOnError is true en typeName is een lege tekenreeks.
– of –
throwOnError is true en typeName vertegenwoordigt een matrixtype met een ongeldige grootte.
– of –
typeName vertegenwoordigt een matrix van TypedReference.
throwOnError is true en typeName bevat ongeldige syntaxis. Bijvoorbeeld 'MyType[,*,]'.
– of –
typeName vertegenwoordigt een algemeen type met een type aanwijzer, een ByRef type of Void als een van de bijbehorende typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type met een onjuist aantal typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type en een van de bijbehorende typeargumenten voldoet niet aan de beperkingen voor de bijbehorende typeparameter.
throwOnError is true en de assembly of een van de bijbehorende afhankelijkheden is niet gevonden.
De assembly of een van de bijbehorende afhankelijkheden is gevonden, maar kan niet worden geladen.
De assembly is niet geldig voor de momenteel geladen runtime.
Opmerkingen
U kunt de GetType methode gebruiken om een Type object op te halen voor een type in een andere assembly als u de naam kent die door de assembly is gekwalificeerd, die u kunt verkrijgen.AssemblyQualifiedName
GetType veroorzaakt het laden van de assembly die is opgegeven in typeName. U kunt ook een assembly laden met behulp van de Assembly.Load methode en vervolgens de Assembly.GetType of Assembly.GetTypes methode gebruiken om objecten op te halen Type . Als een type zich in een assembly bevindt die tijdens het compileren bekend is bij uw programma, is het efficiënter om typeof te gebruiken in C# of de operator GetType in Visual Basic.
alleen .NET Framework: GetType werkt alleen op assembly's die vanaf de schijf zijn geladen. Als u aanroept GetType om een type op te zoeken dat is gedefinieerd in een dynamische assembly die is gedefinieerd met behulp van de System.Reflection.Emit services, krijgt u mogelijk inconsistent gedrag. Het gedrag is afhankelijk van of de dynamische assembly persistent is, dat wil gezegd, gemaakt met behulp van de RunAndSave of Save toegangsmodi van de System.Reflection.Emit.AssemblyBuilderAccess opsomming. Als de dynamische assembly persistent is en eerder naar de schijf GetType is geschreven, vindt het laadprogramma de opgeslagen assembly op schijf, laadt die assembly en haalt het type van die assembly op. Als de assembly niet is opgeslagen op schijf wanneer GetType deze wordt aangeroepen, retourneert nullde methode .
GetType begrijpt tijdelijke dynamische assembly's niet; daarom wordt aanroepen GetType om een type in een tijdelijke dynamische assembly op te halen, geretourneerd null.
Als u in .NET Framework GetType op een dynamische module wilt gebruiken, abonneert u zich op de gebeurtenis AppDomain.AssemblyResolve en roept u GetType aan voordat u opslaat. Anders krijgt u twee kopieën van de assembly in het geheugen.
In .NET Core 3.0 en hoger worden assemblybelastingen die door deze API worden geactiveerd, beïnvloed door de huidige waarde van AssemblyLoadContext.CurrentContextualReflectionContext.
De throwOnError parameter geeft aan wat er gebeurt wanneer het type niet wordt gevonden en onderdrukt ook bepaalde andere uitzonderingsvoorwaarden, zoals beschreven in de sectie Uitzonderingen. Sommige uitzonderingen worden gegenereerd, ongeacht de waarde van throwOnError. Als het type bijvoorbeeld wordt gevonden maar niet kan worden geladen, wordt er een TypeLoadException gegenereerd, zelfs als throwOnError dat het is false.
In de volgende tabel ziet u welke leden van een basisklasse worden geretourneerd door de Get methoden bij het weergeven van een type.
| Lidmaatschapssoort | Static | Niet-statisch |
|---|---|---|
| Constructeur | No | No |
| Veld | No | Yes. Een veld wordt altijd verborgen op basis van naam en kenmerk. |
| Gebeurtenis | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
| Methode | No | Yes. Een methode (zowel virtueel als niet-virtueel) kan worden verborgen op basis van naam of op basis van naam en handtekening. |
| Geneste type | No | No |
| Vastgoed | Niet van toepassing | De algemene regels van het type-systeem zijn dat de overerving hetzelfde is als die van de methoden die de eigenschap implementeren. Weerspiegeling behandelt eigenschappen als hide-by-name-and-signature. Zie opmerking 2 hieronder. |
Hide-by-name-and-signature beschouwt alle onderdelen van de handtekening, waaronder aangepaste modifiers, retourtypen, parametertypen, sentinels en onbeheerde aanroepconventies. Dit is een binaire vergelijking.
Voor reflectie worden eigenschappen en gebeurtenissen verborgen op basis van naam en signatuur. Als u een eigenschap hebt met zowel een get als een set accessor in de basisklasse, maar de afgeleide klasse alleen een get-accessor heeft, verbergt de eigenschap afgeleide klasse de eigenschap basisklasse en hebt u geen toegang tot de setter op de basisklasse.
Aangepaste kenmerken maken geen deel uit van het algemene typesysteem.
Matrices of COM-typen worden niet gezocht, tenzij ze al in de tabel met beschikbare klassen zijn geladen.
typeName kan de typenaam zijn die is gekwalificeerd door de naamruimte of een assembly-gekwalificeerde naam die een assemblynaamspecificatie bevat. Zie AssemblyQualifiedName.
Als typeName de naamruimte maar niet de assemblynaam bevat, zoekt deze methode alleen in de assembly van het aanroepende object en mscorlib.dll/System.Private.CoreLib.dll, in die volgorde. Als typeName volledig is gekwalificeerd met de gedeeltelijke of volledige assemblynaam, zoekt deze methode in de opgegeven assembly. Als de assembly een sterke naam heeft, is een volledige assemblynaam vereist.
De AssemblyQualifiedName eigenschap retourneert een volledig gekwalificeerde typenaam, inclusief geneste typen, de assemblynaam en typeargumenten. Alle compilers die ondersteuning bieden voor de algemene taalruntime, verzenden de eenvoudige naam van een geneste klasse en weerspiegeling bouwt een mangled-naam wanneer een query wordt uitgevoerd, in overeenstemming met de volgende conventies.
Note
Processorarchitectuur maakt deel uit van de assembly-identiteit en kan worden opgegeven als onderdeel van assemblynaamtekenreeksen. Bijvoorbeeld 'ProcessorArchitecture=msil'. Het is echter niet opgenomen in de tekenreeks die door de AssemblyQualifiedName eigenschap wordt geretourneerd om compatibiliteitsredenen. U kunt ook typen laden door een AssemblyName object te maken en door te geven aan een juiste overbelasting van de Load methode. Vervolgens kunt u de Assembly.GetType methode gebruiken om typen uit de assembly te laden. Zie ook AssemblyName.ProcessorArchitecture.
| Scheidingsteken | Meaning |
|---|---|
| Backslash (\) | Escape-teken. |
| Backtick (') | Gaat vooraf aan een of meer cijfers die het aantal parameters van het type vertegenwoordigen, dat zich aan het einde van de naam van een algemeen type bevindt. |
| Vierkante haken ([]) | Plaats een lijst met algemene typeargumenten voor een samengesteld algemeen type; plaats binnen een lijst met typeargumenten een assembly-gekwalificeerde type. |
| Komma (,) | Gaat vooraf aan de assemblynaam. |
| Punt (.) | Geeft de naamruimte-id's aan. |
| Plusteken (+) | Gaat vooraf aan een geneste klasse. |
De volledig gekwalificeerde naam voor een klasse kan er bijvoorbeeld als volgt uitzien:
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Als de naamruimte TopNamespace.Sub+Naamruimte was, moet de tekenreeks voorafgaan aan het plusteken (+) met een escapeteken (\) om te voorkomen dat deze wordt geïnterpreteerd als een nestscheidingsteken. Weerspiegeling verzendt deze tekenreeks als volgt:
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Een "++" wordt "\+\+" en een "\" wordt "\\".
Deze gekwalificeerde naam kan worden behouden en later worden gebruikt om de Type. Als u een Typewilt zoeken en laden, gebruikt GetType u deze alleen met de typenaam of met de naam van het gekwalificeerde assembly-type. GetType met de typenaam wordt alleen gezocht naar de Type assembly van de aanroeper en vervolgens in de systeemassembly. GetType met de naam van het gekwalificeerde type assembly zoekt u naar de Type in elke assembly.
Typenamen kunnen volgtekens bevatten die aanvullende informatie over het type aangeven, zoals of het type een verwijzingstype, een aanwijzer of een matrixtype is. Als u de typenaam zonder deze volgtekens wilt ophalen, gebruikt t.GetElementType().ToString()u , waar t is het type.
Spaties zijn relevant voor alle typenaamonderdelen, behalve de assemblynaam. In de assemblynaam zijn spaties vóór het scheidingsteken ',' relevant, maar spaties na het scheidingsteken ',' worden genegeerd.
De naam van een algemeen type eindigt met een backtick (') gevolgd door cijfers die het aantal algemene typeargumenten vertegenwoordigen. Het doel van deze naambeheer is om compilers toe te staan algemene typen te ondersteunen met dezelfde naam, maar met verschillende getallen van typeparameters, die zich in hetzelfde bereik voordoen. Weerspiegeling retourneert bijvoorbeeld de namen Tuple`1 en Tuple`2 van de algemene methoden Tuple(Of T) en Tuple(Of T0, T1) in Visual Basic, of Tuple<T> en Tuple<T0, T1> in Visual C#.
Voor algemene typen wordt de lijst met typeargumenten tussen vierkante haken geplaatst en worden de typeargumenten gescheiden door komma's. Een algemeen Dictionary<TKey,TValue> heeft bijvoorbeeld twee typeparameters. Een Dictionary<TKey,TValue> van MyType de sleutels van het type String kan als volgt worden weergegeven:
System.Collections.Generic.Dictionary`2[System.String,MyType]
Als u een type-gekwalificeerde type in een lijst met typeargumenten wilt opgeven, plaatst u het type met gekwalificeerde assembly's tussen vierkante haken. Anders worden de komma's die de onderdelen van de assembly-gekwalificeerde naam scheiden geïnterpreteerd als het scheiden van aanvullende typeargumenten. Een van Dictionary<TKey,TValue> MyAssembly.dll, met sleutels van het typeMyType, kan bijvoorbeeld String als volgt worden opgegeven:
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Note
Een assembly-gekwalificeerde type kan alleen tussen vierkante haken worden geplaatst wanneer het binnen een typeparameterlijst wordt weergegeven. De regels voor het zoeken naar assembly's voor gekwalificeerde en niet-gekwalificeerde typen in typeparameterlijsten zijn hetzelfde als de regels voor gekwalificeerde en niet-gekwalificeerde niet-gegenereerde typen.
Null-typen zijn een speciaal geval van algemene typen. Een null-waarde Int32 wordt bijvoorbeeld vertegenwoordigd door de tekenreeks System.Nullable'1[System.Int32].
Note
U kunt ook null-typen ophalen met behulp van typeoperators. Het type nullable Boolean wordt bijvoorbeeld geretourneerd door typeof(Nullable<bool>) in C# en door GetType(Nullable(Of Boolean)) in Visual Basic.
In de volgende tabel ziet u de syntaxis waarmee GetType u voor verschillende typen gebruikmaakt.
| Ophalen | Gebruik |
|---|---|
| Een null-waarde Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Een onbeheerde aanwijzer naar MyType |
Type.GetType("MyType*") |
Een onbeheerde aanwijzer naar een aanwijzer MyType |
Type.GetType("MyType**") |
Een beheerde aanwijzer of verwijzing naar MyType |
Type.GetType("MyType&"). In tegenstelling tot verwijzingen zijn verwijzingen beperkt tot één niveau. |
| Een bovenliggende klasse en een geneste klasse | Type.GetType("MyParentClass+MyNestedClass") |
| Een eendimensionale matrix met een ondergrens van 0 | Type.GetType("MyArray[]") |
| Een eendimensionale matrix met een onbekende ondergrens | Type.GetType("MyArray[*]") |
| Een n-dimensionale matrix | Een komma (,) tussen de haakjes een totaal van n-1 keer. Vertegenwoordigt bijvoorbeeld System.Object[,,] een driedimensionale Object matrix. |
| De matrix van een tweedimensionale matrix | Type.GetType("MyArray[][]") |
| Een rechthoekige tweedimensionale matrix met onbekende ondergrenzen | Type.GetType("MyArray[,]") |
| Een algemeen type met één typeargument | Type.GetType("MyGenericType`1[MyType]") |
| Een algemeen type met twee typeargumenten | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
| Een algemeen type met twee assembly-gekwalificeerde typeargumenten | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
| Een algemeen type dat is gekwalificeerd voor assembly's met een argument van het type assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
| Een algemeen type waarvan het typeargument een algemeen type is met twee typeargumenten | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Zie ook
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Volledig gekwalificeerde typenamen opgeven
Van toepassing op
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
Hiermee haalt u het type op met de opgegeven naam, optioneel aangepaste methoden opgeven om de assembly en het type op te lossen.
public:
static Type ^ GetType(System::String ^ typeName, Func<System::Reflection::AssemblyName ^, System::Reflection::Assembly ^> ^ assemblyResolver, Func<System::Reflection::Assembly ^, System::String ^, bool, Type ^> ^ typeResolver);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> -> Type
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
Parameters
- typeName
- String
De naam van het type dat u wilt ophalen. Als de typeResolver parameter is opgegeven, kan de typenaam elke tekenreeks zijn die typeResolver kan worden omgezet. Als de assemblyResolver parameter wordt opgegeven of als standaardtypeomzetting wordt gebruikt, typeName moet dit een assembly-gekwalificeerde naam zijn (zie AssemblyQualifiedName), tenzij het type zich in de huidige uitvoeringsassembly of in mscorlib.dll/System.Private.CoreLib.dllbevindt. In dat geval is het voldoende om de typenaam op te geven die is gekwalificeerd door de naamruimte.
- assemblyResolver
- Func<AssemblyName,Assembly>
Een methode die de assembly zoekt en retourneert die is opgegeven in typeName. De assemblynaam wordt doorgegeven assemblyResolver als een AssemblyName object. Als typeName deze niet de naam van een assembly bevat, assemblyResolver wordt deze niet aangeroepen. Als assemblyResolver dit niet wordt opgegeven, wordt standaardassemblyresolutie uitgevoerd.
Let op: geef geen methoden door van onbekende of niet-vertrouwde bellers. Als u dit doet, kan dit leiden tot uitbreiding van bevoegdheden voor schadelijke code. Gebruik alleen methoden die u opgeeft of waarmee u bekend bent.
Een methode die het type zoekt en retourneert dat is opgegeven door typeName de assembly die wordt geretourneerd door assemblyResolver of door standaardassemblyresolutie. Als er geen assembly is opgegeven, kan de typeResolver methode er een opgeven. De methode gebruikt ook een parameter die aangeeft of een hoofdlettergevoelige zoekopdracht moet worden uitgevoerd; false wordt doorgegeven aan die parameter.
Let op: geef geen methoden door van onbekende of niet-vertrouwde bellers.
Retouren
Het type met de opgegeven naam of null als het type niet wordt gevonden.
- Kenmerken
Uitzonderingen
typeName is null.
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
Er treedt een fout op wanneer typeName deze wordt geparseerd in een typenaam en een assemblynaam (bijvoorbeeld wanneer de eenvoudige typenaam een niet-gescaped speciaal teken bevat).
– of –
typeName vertegenwoordigt een algemeen type met een type aanwijzer, een ByRef type of Void als een van de bijbehorende typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type met een onjuist aantal typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type en een van de bijbehorende typeargumenten voldoet niet aan de beperkingen voor de bijbehorende typeparameter.
typeName vertegenwoordigt een ongeldig type, bijvoorbeeld een matrix van TypedReference.
De assembly of een van de bijbehorende afhankelijkheden is gevonden, maar kan niet worden geladen.
– of –
typeName bevat een ongeldige assemblynaam.
– of –
typeName is een geldige assemblynaam zonder een typenaam.
De assembly of een van de afhankelijkheden is niet geldig voor de momenteel geladen runtime.
Opmerkingen
Gebruiksscenario's voor deze methode en details over de assemblyResolver en typeResolver parameters vindt u in de overbelasting van de GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) methode.
Note
Als typeName deze niet kan worden gevonden, retourneert GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)de aanroep van de null methode . Er wordt geen uitzondering gegenereerd. Als u wilt bepalen of er een uitzondering wordt gegenereerd, roept u een overbelasting aan van de GetType methode met een throwOnError parameter.
Het aanroepen van deze methode-overbelasting is hetzelfde als het aanroepen van de overbelasting van de methode en het opgeven van de parameters voor de GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)false methodethrowOnError.ignoreCase
Van toepassing op
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
Hiermee wordt het type met de opgegeven naam opgevraagd, waarbij wordt opgegeven of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden, en eventueel aangepaste methoden opgeven om de assembly en het type op te lossen.
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
public static Type? GetType(string typeName, Func<System.Reflection.AssemblyName,System.Reflection.Assembly?>? assemblyResolver, Func<System.Reflection.Assembly?,string,bool,Type?>? typeResolver, bool throwOnError);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool -> Type
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
Parameters
- typeName
- String
De naam van het type dat u wilt ophalen. Als de typeResolver parameter is opgegeven, kan de typenaam elke tekenreeks zijn die typeResolver kan worden omgezet. Als de assemblyResolver parameter wordt opgegeven of als standaardtypeomzetting wordt gebruikt, typeName moet dit een assembly-gekwalificeerde naam zijn (zie AssemblyQualifiedName), tenzij het type zich in de huidige uitvoeringsassembly of in mscorlib.dll/System.Private.CoreLib.dllbevindt. In dat geval is het voldoende om de typenaam op te geven die is gekwalificeerd door de naamruimte.
- assemblyResolver
- Func<AssemblyName,Assembly>
Een methode die de assembly zoekt en retourneert die is opgegeven in typeName. De assemblynaam wordt doorgegeven assemblyResolver als een AssemblyName object. Als typeName deze niet de naam van een assembly bevat, assemblyResolver wordt deze niet aangeroepen. Als assemblyResolver dit niet wordt opgegeven, wordt standaardassemblyresolutie uitgevoerd.
Let op: geef geen methoden door van onbekende of niet-vertrouwde bellers. Als u dit doet, kan dit leiden tot uitbreiding van bevoegdheden voor schadelijke code. Gebruik alleen methoden die u opgeeft of waarmee u bekend bent.
Een methode die het type zoekt en retourneert dat is opgegeven door typeName de assembly die wordt geretourneerd door assemblyResolver of door standaardassemblyresolutie. Als er geen assembly is opgegeven, kan de methode er een opgeven. De methode gebruikt ook een parameter die aangeeft of een hoofdlettergevoelige zoekopdracht moet worden uitgevoerd; false wordt doorgegeven aan die parameter.
Let op: geef geen methoden door van onbekende of niet-vertrouwde bellers.
- throwOnError
- Boolean
true om een uitzondering te genereren als het type niet kan worden gevonden; false om terug te keren null.
false Als u opgeeft, worden ook enkele andere uitzonderingsvoorwaarden onderdrukt, maar niet allemaal. Zie de sectie Uitzonderingen.
Retouren
Het type met de opgegeven naam. Als het type niet wordt gevonden, geeft de throwOnError parameter aan of null deze wordt geretourneerd of er een uitzondering wordt gegenereerd. In sommige gevallen wordt er een uitzondering gegenereerd, ongeacht de waarde van throwOnError. Zie de sectie Uitzonderingen.
- Kenmerken
Uitzonderingen
typeName is null.
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
throwOnError is true en het type is niet gevonden.
– of –
throwOnError is true en typeName bevat ongeldige tekens, zoals een ingesloten tabblad.
– of –
throwOnError is true en typeName is een lege tekenreeks.
– of –
throwOnError is true en typeName vertegenwoordigt een matrixtype met een ongeldige grootte.
– of –
typeName vertegenwoordigt een matrix van TypedReference.
Er treedt een fout op wanneer typeName deze wordt geparseerd in een typenaam en een assemblynaam (bijvoorbeeld wanneer de eenvoudige typenaam een niet-gescaped speciaal teken bevat).
– of –
throwOnError is true en typeName bevat een ongeldige syntaxis (bijvoorbeeld 'MyType[,*,]').
– of –
typeName vertegenwoordigt een algemeen type met een type aanwijzer, een ByRef type of Void als een van de bijbehorende typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type met een onjuist aantal typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type en een van de bijbehorende typeargumenten voldoet niet aan de beperkingen voor de bijbehorende typeparameter.
throwOnError is true en de assembly of een van de bijbehorende afhankelijkheden is niet gevonden.
– of –
typeName bevat een ongeldige assemblynaam.
– of –
typeName is een geldige assemblynaam zonder een typenaam.
De assembly of een van de bijbehorende afhankelijkheden is gevonden, maar kan niet worden geladen.
De assembly of een van de afhankelijkheden is niet geldig voor de momenteel geladen runtime.
Opmerkingen
Gebruiksscenario's voor deze methode en details over de assemblyResolver en typeResolver parameters vindt u in de overbelasting van de GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) methode.
Het aanroepen van deze methode-overbelasting is hetzelfde als het aanroepen van de overbelasting van de GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) methode en het opgeven false van de ignoreCase parameter.
Van toepassing op
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
- Bron:
- Type.CoreCLR.cs
Hiermee haalt u het type op met de opgegeven naam, waarbij wordt opgegeven of u een hoofdlettergevoelige zoekopdracht wilt uitvoeren en of er een uitzondering moet worden gegenereerd als het type niet wordt gevonden, en optioneel aangepaste methoden opgeven om de assembly en het type op te lossen.
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);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")]
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);
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);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("The type might be removed")>]
static member GetType : string * Func<System.Reflection.AssemblyName, System.Reflection.Assembly> * Func<System.Reflection.Assembly, string, bool, Type> * bool * bool -> Type
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
Parameters
- typeName
- String
De naam van het type dat u wilt ophalen. Als de typeResolver parameter is opgegeven, kan de typenaam elke tekenreeks zijn die typeResolver kan worden omgezet. Als de assemblyResolver parameter wordt opgegeven of als standaardtypeomzetting wordt gebruikt, typeName moet dit een assembly-gekwalificeerde naam zijn (zie AssemblyQualifiedName), tenzij het type zich in de huidige uitvoeringsassembly of in mscorlib.dll/System.Private.CoreLib.dllbevindt. In dat geval is het voldoende om de typenaam op te geven die is gekwalificeerd door de naamruimte.
- assemblyResolver
- Func<AssemblyName,Assembly>
Een methode die de assembly zoekt en retourneert die is opgegeven in typeName. De assemblynaam wordt doorgegeven assemblyResolver als een AssemblyName object. Als typeName deze niet de naam van een assembly bevat, assemblyResolver wordt deze niet aangeroepen. Als assemblyResolver dit niet wordt opgegeven, wordt standaardassemblyresolutie uitgevoerd.
Let op: geef geen methoden door van onbekende of niet-vertrouwde bellers. Als u dit doet, kan dit leiden tot uitbreiding van bevoegdheden voor schadelijke code. Gebruik alleen methoden die u opgeeft of waarmee u bekend bent.
Een methode die het type zoekt en retourneert dat is opgegeven door typeName de assembly die wordt geretourneerd door assemblyResolver of door standaardassemblyresolutie. Als er geen assembly is opgegeven, kan de methode er een opgeven. De methode gebruikt ook een parameter die aangeeft of een hoofdlettergevoelige zoekopdracht moet worden uitgevoerd; de waarde van ignoreCase wordt doorgegeven aan die parameter.
Let op: geef geen methoden door van onbekende of niet-vertrouwde bellers.
- throwOnError
- Boolean
true om een uitzondering te genereren als het type niet kan worden gevonden; false om terug te keren null.
false Als u opgeeft, worden ook enkele andere uitzonderingsvoorwaarden onderdrukt, maar niet allemaal. Zie de sectie Uitzonderingen.
- ignoreCase
- Boolean
trueom een hoofdlettergevoelige zoekopdracht uit te voeren om typeName een hoofdlettergevoelige zoekopdracht falsetypeNameuit te voeren.
Retouren
Het type met de opgegeven naam. Als het type niet wordt gevonden, geeft de throwOnError parameter aan of null deze wordt geretourneerd of er een uitzondering wordt gegenereerd. In sommige gevallen wordt er een uitzondering gegenereerd, ongeacht de waarde van throwOnError. Zie de sectie Uitzonderingen.
- Kenmerken
Uitzonderingen
typeName is null.
Er wordt een klasse-initializer aangeroepen en er wordt een uitzondering gegenereerd.
throwOnError is true en het type is niet gevonden.
– of –
throwOnError is true en typeName bevat ongeldige tekens, zoals een ingesloten tabblad.
– of –
throwOnError is true en typeName is een lege tekenreeks.
– of –
throwOnError is true en typeName vertegenwoordigt een matrixtype met een ongeldige grootte.
– of –
typeName vertegenwoordigt een matrix van TypedReference.
Er treedt een fout op wanneer typeName deze wordt geparseerd in een typenaam en een assemblynaam (bijvoorbeeld wanneer de eenvoudige typenaam een niet-gescaped speciaal teken bevat).
– of –
throwOnError is true en typeName bevat een ongeldige syntaxis (bijvoorbeeld 'MyType[,*,]').
– of –
typeName vertegenwoordigt een algemeen type met een type aanwijzer, een ByRef type of Void als een van de bijbehorende typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type met een onjuist aantal typeargumenten.
– of –
typeName vertegenwoordigt een algemeen type en een van de bijbehorende typeargumenten voldoet niet aan de beperkingen voor de bijbehorende typeparameter.
throwOnError is true en de assembly of een van de bijbehorende afhankelijkheden is niet gevonden.
De assembly of een van de bijbehorende afhankelijkheden is gevonden, maar kan niet worden geladen.
– of –
typeName bevat een ongeldige assemblynaam.
– of –
typeName is een geldige assemblynaam zonder een typenaam.
De assembly of een van de afhankelijkheden is geen geldige assembly voor de momenteel geladen runtime.
Opmerkingen
Als in .NET Core 3.0 en latere versies assemblyResolver null is, worden assemblybelastingen die door deze API worden geactiveerd, beïnvloed door de huidige waarde van AssemblyLoadContext.CurrentContextualReflectionContext.
Gebruik de overbelasting van de GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) methode en de bijbehorende overbelastingen (GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) en GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)) om de standaard implementatie van de GetType methode te vervangen door flexibelere implementaties. Door uw eigen methoden te bieden waarmee u typenamen en de namen van de assembly's die ze bevatten oplost, kunt u het volgende doen:
- Regel vanuit welke versie van een assembly een type wordt geladen.
- Geef een andere plaats op om te zoeken naar een typenaam die geen assemblynaam bevat.
- Assemblies laden met behulp van gedeeltelijke assemblynamen.
- Retourneert subklassen System.Type die niet zijn gemaakt door de Common Language Runtime (CLR).
In versietolerante serialisatie kunt u met deze methode bijvoorbeeld zoeken naar een assembly die het beste past met behulp van een gedeeltelijke naam. Voor andere overbelastingen van de GetType methode is een assembly-gekwalificeerde typenaam vereist, waaronder het versienummer.
Alternatieve implementaties van het typesysteem moeten mogelijk subklassen System.Type retourneren die niet zijn gemaakt door de CLR. Alle typen die worden geretourneerd door andere overbelastingen van de GetType methode zijn runtimetypen.
Gebruiksnotities
Deze methode-overbelasting en de bijbehorende overbelastingen parseren typeName tot de naam van een type en de naam van een assembly en lossen vervolgens deze namen op. Het oplossen van de assembly-naam vindt plaats vóór het oplossen van de type-naam, omdat een type-naam moet worden opgelost binnen de context van een assembly.
Note
Als u niet bekend bent met het concept van assembly-gekwalificeerde typebenamingen, raadpleegt u de AssemblyQualifiedName eigenschap.
Als typeName geen assembly-gekwalificeerde naam is, wordt assembly-resolutie overgeslagen. Niet-gekwalificeerde typenamen kunnen in de context van mscorlib.dll/System.Private.CoreLib.dll of de momenteel uitgevoerde assembly worden opgelost, of u desgewenst een assembly in de typeResolver-parameter kunt opgeven. De effecten van het opnemen of weglaten van de assemblynaam voor verschillende soorten naamomzetting worden weergegeven als een tabel in de sectie Gemengde naamomzetting .
Algemene gebruiksnotities:
Geef geen methoden door aan
assemblyResolveroftypeResolverals ze afkomstig zijn van onbekende of niet-vertrouwde bellers. Gebruik alleen methoden die u opgeeft of waarmee u bekend bent.Caution
Het gebruik van methoden van onbekende of niet-vertrouwde aanroepers kan leiden tot onrechtmatige uitbreiding van bevoegdheden voor schadelijke code.
Als u de
assemblyResolveren/oftypeResolverparameters weglaat, wordt de waarde van dethrowOnErrorparameter doorgegeven aan de methoden die de standaardresolutie uitvoeren.Als
throwOnErrortrueis, gooit deze methode een TypeLoadException wanneertypeResolvernullretourneert en een FileNotFoundException wanneerassemblyResolvernullretourneert.Deze methode ondervangt geen uitzonderingen die worden gegenereerd door
assemblyResolverentypeResolver. U bent verantwoordelijk voor eventuele uitzonderingen die worden gegenereerd door de resolver-methoden.
Assemblages oplossen
De assemblyResolver methode ontvangt een AssemblyName object dat wordt geproduceerd door de naam van de tekenreeksassembly te parseren die is opgenomen in typeName. Als typeName geen assemblynaam bevat, wordt assemblyResolver niet aangeroepen en wordt null doorgegeven aan typeResolver.
Indien assemblyResolver niet is opgegeven, wordt standaard assembly probing gebruikt om de assembly te vinden. Als assemblyResolver wordt opgegeven, voert de GetType methode geen standaardproef uit; in dat geval moet u ervoor zorgen dat uw assemblyResolver alle assemblages kan verwerken die u eraan doorgeeft.
De methode assemblyResolver moet null retourneren als de assembly niet kan worden opgelost. Als assemblyResolvernull retourneert, wordt typeResolver niet aangeroepen en vindt er geen verdere verwerking plaats; daarnaast, als throwOnErrortrue is, wordt er een FileNotFoundException gegooid.
Als het AssemblyName dat aan assemblyResolver wordt doorgegeven een gedeeltelijke naam is, zijn één of meer van de onderdelen null. Als het bijvoorbeeld geen versie heeft, is de Version eigenschap null. Als de Version eigenschap, de CultureInfo eigenschap en de GetPublicKeyToken methode allemaal null retourneren, dan is alleen de eenvoudige naam van de assembly opgegeven. De assemblyResolver methode kan alle onderdelen van de assemblynaam gebruiken of negeren.
De effecten van verschillende opties voor assembly-resolutie worden weergegeven als een tabel in de sectie Mixed name resolution, voor simpele en op assembly gebaseerde typenamen.
Typen verwerken
Als typeName geen assemblynaam opgeeft, wordt typeResolver altijd aangeroepen. Als typeName een assemblynaam specificeert, wordt typeResolver alleen aangeroepen wanneer de assemblynaam succesvol is opgelost. Als assemblyResolver of standaardassemblyprobing null retourneert, wordt typeResolver niet aangeroepen.
De typeResolver methode ontvangt drie argumenten:
- De assembly die moet worden gezocht, of
nullindientypeNamegeen assemblynaam bevat. - De eenvoudige naam van het type. In het geval van een genest type is dit het buitenste type dat het bevat. In het geval van een algemeen type is dit de eenvoudige naam van het algemene type.
- Een Booleaanse waarde die het
truegeval is van typenamen moet worden genegeerd.
De implementatie bepaalt hoe deze argumenten worden gebruikt. De typeResolver-methode zou null moeten retourneren als het type niet kan worden opgelost. Als typeResolvernull teruggeeft en throwOnError is true, veroorzaakt deze functie-overbelasting van GetType een TypeLoadException.
De effecten van verschillende opties voor typeomzetting worden weergegeven als een tabel in de sectie Gemengde naamomzetting voor eenvoudige en assembly-gekwalificeerde typenamen.
Geneste structuren oplossen
Als typeName een genest type is, wordt alleen de naam van het meest buitenliggende type doorgegeven aan typeResolver. Wanneer typeResolver dit type retourneert, wordt de GetNestedType-methode recursief aangeroepen totdat het binnenste geneste type is opgelost.
Algemene typen oplossen
De GetType naam wordt recursief genoemd om algemene typen op te lossen: eerst om het algemene type zelf op te lossen en vervolgens om de bijbehorende typeargumenten op te lossen. Als een typeargument algemeen is, GetType wordt recursief aangeroepen om de typeargumenten op te lossen, enzovoort.
De combinatie van assemblyResolver en typeResolver die u opgeeft, moet alle niveaus van deze recursie kunnen oplossen. Stel dat u een assemblyResolver element opgeeft dat de controle over het laden van MyAssembly uitvoert. Stel dat u het algemene type Dictionary<string, MyType> (Dictionary(Of String, MyType) in Visual Basic) wilt oplossen. U kunt de volgende algemene typenaam doorgeven:
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
U merkt op dat MyType het enige typeargument is dat met een assembly is gekwalificeerd. De klassenamen van de Dictionary<TKey,TValue> en String zijn niet assembly-gekwalificeerd. Uw typeResolver moet in staat zijn om een assembly of null te verwerken, omdat het null voor Dictionary<TKey,TValue> en String zal ontvangen. Het kan dat geval verwerken door een overload van de GetType methode aan te roepen die een string gebruikt, omdat beide ongedefinieerde typenamen zich in mscorlib.dll/System.Private.CoreLib.dllbevinden.
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)
);
let t =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else null),
fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr))
De assemblyResolver methode wordt niet aangeroepen voor het woordenlijsttype en het tekenreekstype, omdat deze typenamen niet assembly-gekwalificeerde zijn.
Stel nu dat in plaats van System.String, het eerste algemene argumenttype is YourType, van YourAssembly:
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Omdat deze assembly niet mscorlib.dll/System.Private.CoreLib.dll of de momenteel uitgevoerde assembly is, kunt u deze niet oplossen YourType zonder een assembly-gekwalificeerde naam. Omdat uw assemblyResolve naam recursief wordt aangeroepen, moet het deze case kunnen afhandelen. In plaats van terug te keren null voor andere assembly's dan MyAssembly, wordt er nu een assemblybelasting uitgevoerd met behulp van het opgegeven AssemblyName object.
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
);
let t2 =
Type.GetType(test,
(fun aName ->
if aName.Name = "MyAssembly" then
Assembly.LoadFrom @".\MyPath\v5.0\MyAssembly.dll"
else Assembly.Load aName),
(fun assem name ignr ->
if assem = null then
Type.GetType(name, false, ignr)
else
assem.GetType(name, false, ignr)), true)
Typenamen met speciale tekens oplossen
Bepaalde tekens hebben speciale betekenissen in assembly-gekwalificeerde namen. Als een eenvoudige typenaam deze tekens bevat, veroorzaken de tekens parseringsfouten wanneer de eenvoudige naam deel uitmaakt van een assembly-gekwalificeerde naam. Om de parseringsfouten te voorkomen, moet u de speciale tekens met een backslash ontsnappen voordat u de assembly-gekwalificeerde naam aan de GetType methode kunt doorgeven. Als een type bijvoorbeeld een naam Strange]Typeheeft, moet het escapeteken als volgt vóór de vierkante haak worden toegevoegd: Strange\]Type
Note
Namen met dergelijke speciale tekens kunnen niet worden gemaakt in Visual Basic of C#, maar kunnen worden gemaakt met behulp van algemene tussenliggende taal (CIL) of door dynamische assembly's te verzenden.
De volgende tabel bevat de speciale tekens voor typenamen.
| Karakter | Meaning |
|---|---|
, (komma) |
Scheidingsteken voor assembly-gekwalificeerde namen. |
[] (vierkante haken) |
Als achtervoegselpaar geeft een matrixtype aan; als scheidingstekenpaar plaatst u algemene argumentlijsten en assembly-gekwalificeerde namen. |
& (en-teken) |
Als achtervoegsel geeft u aan dat een type een verwijzingstype is. |
* (sterretje) |
Als achtervoegsel geeft u aan dat een type een aanwijzertype is. |
+ (plus) |
Scheidingsteken voor geneste typen. |
\ (backslash) |
Escape-teken. |
Eigenschappen zoals AssemblyQualifiedName correct escape-tekenreeksen retourneren. U moet correct geëscapeerde strings doorgeven aan de GetType-methode. De GetType-methode geeft op zijn beurt correct ontsnapte namen door aan typeResolver en aan de standaardmethoden voor typeresolutie. Als u een naam wilt vergelijken met een onweergegeven naam in typeResolver, moet u de escape-tekens verwijderen.
Gemengde naamresolutie
De volgende tabel bevat een overzicht van de interacties tussen assemblyResolver, typeResolver, en standaard naamomzetting voor alle combinaties van typenaam en assemblynaam in typeName.
| Inhoud van typenaam | Assembly-resolvermethode | Type resolver methode | Result |
|---|---|---|---|
| type, assemblage | nul | nul | Gelijk aan het aanroepen van de overbelasting van de Type.GetType(String, Boolean, Boolean) methode. |
| type, assemblage | geleverd | nul |
assemblyResolver retourneert de assembly of retourneert null als deze de assembly niet kan oplossen. Als de assembly is opgelost, wordt de overbelasting van de Assembly.GetType(String, Boolean, Boolean) methode gebruikt om het type van de assembly te laden. Anders is er geen poging om het type op te lossen. |
| type, assemblage | nul | geleverd | Komt overeen met het converteren van de assemblynaam naar een AssemblyName object en het aanroepen van de overbelasting van de Assembly.Load(AssemblyName) methode om de assembly op te halen. Als de assemblage is opgelost, wordt deze doorgegeven aan typeResolver; anders wordt typeResolver niet aangeroepen en wordt het type niet verder opgelost. |
| type, assemblage | geleverd | geleverd |
assemblyResolver retourneert de assembly of retourneert null als deze de assembly niet kan oplossen. Als de assemblage is opgelost, wordt deze doorgegeven aan typeResolver; anders wordt typeResolver niet aangeroepen en wordt het type niet verder opgelost. |
| type | null, verstrekt | nul | Gelijk aan het aanroepen van de overbelasting van de Type.GetType(String, Boolean, Boolean) methode. Omdat de assemblynaam niet is opgegeven, worden alleen mscorlib.dll/System.Private.CoreLib.dll en de momenteel uitgevoerde assembly doorzocht. Als assemblyResolver wordt opgegeven, wordt het genegeerd. |
| type | null, verstrekt | geleverd |
typeResolver wordt aangeroepen en null wordt doorgegeven voor de assemblage.
typeResolver kan een type leveren uit elke assemblage, inclusief assemblages die voor dit doel worden geladen. Als assemblyResolver wordt opgegeven, wordt het genegeerd. |
| bijeenkomst | null, verstrekt | null, verstrekt | Er wordt een FileLoadException gegenereerd omdat de assemblynaam wordt geparseerd alsof het een assembly-gekwalificeerde typenaam is. Dit resulteert in een ongeldige assemblynaam. |