Type.GetType Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient un objet Type qui représente le type spécifié.
Surcharges
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) |
Obtient le type portant le nom spécifié, en indiquant s'il faut effectuer une recherche qui respecte la casse et si une exception doit être levée si le type est introuvable, et éventuellement, en fournissant des méthodes personnalisées qui permettent de résoudre l'assembly et le type. |
GetType() |
Obtient le Type actuel. |
GetType(String) |
Obtient le Type avec le nom spécifié, effectuant une recherche qui respecte la casse. |
GetType(String, Boolean) |
Obtient le Type portant le nom spécifié, en effectuant une recherche respectant la casse et en spécifiant s'il faut lever une exception si le type est introuvable. |
GetType(String, Boolean, Boolean) |
Obtient le Type portant le nom spécifié, indiquant s'il faut lever une exception si le type est introuvable et s'il faut effectuer une recherche respectant la casse. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) |
Obtient le type avec le nom spécifié et éventuellement des méthodes personnalisées permettant de résoudre l'assembly et le type. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) |
Obtient le type portant le nom spécifié, en indiquant s'il faut lever une exception si le type est introuvable et, éventuellement, en fournissant des méthodes personnalisées qui permettent de résoudre l'assembly et le type. |
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean)
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
Obtient le type portant le nom spécifié, en indiquant s'il faut effectuer une recherche qui respecte la casse et si une exception doit être levée si le type est introuvable, et éventuellement, en fournissant des méthodes personnalisées qui permettent de résoudre l'assembly et le type.
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
Paramètres
- typeName
- String
Nom du type à obtenir. Si le paramètre typeResolver
est fourni, le nom de type peut être n'importe quelle chaîne pouvant être résolue par typeResolver
. Si le paramètre est fourni ou si une assemblyResolver
résolution de type standard est utilisée, typeName
doit être un nom qualifié d’assembly (voir AssemblyQualifiedName), sauf si le type se trouve dans l’assembly en cours d’exécution ou dans mscorlib.dll/System.Private.CoreLib.dll, auquel cas il suffit de fournir le nom de type qualifié par son espace de noms.
- assemblyResolver
- Func<AssemblyName,Assembly>
Méthode qui trouve et retourne l'assembly spécifié dans typeName
. Le nom de l'assembly est passé à assemblyResolver
en tant qu'objet AssemblyName. Si typeName
ne contient pas le nom d'un assembly, assemblyResolver
n'est pas appelé. Si assemblyResolver
n'est pas fourni, une résolution d'assembly standard est effectuée.
Attention : ne passez pas de méthodes d’appelants inconnus ou non approuvés. Vous risqueriez d'élever les privilèges du code malveillant. Utilisez uniquement les méthodes que vous fournissez ou avec lesquelles vous êtes familiarisé.
Méthode qui trouve et retourne le type spécifié par typeName
à partir de l'assembly retourné par assemblyResolver
ou par la résolution d'assembly standard. Si aucun assembly n'est fourni, la méthode peut en fournir un. La méthode prend également un paramètre qui spécifie s'il faut exécuter une recherche non sensible à la casse ; la valeur de ignoreCase
est passée à ce paramètre.
Attention : ne passez pas de méthodes d’appelants inconnus ou non approuvés.
- throwOnError
- Boolean
true
pour lever une exception si le type est introuvable ; false
pour retourner null
.
false
supprime également d'autres conditions d'exception, mais pas toutes. Consultez la section Exceptions.
- ignoreCase
- Boolean
true
pour effectuer une recherche qui ne respecte pas la casse de typeName
et false
pour effectuer une recherche qui respecte la casse de typeName
.
Retours
Type portant le nom spécifié. Si le type est introuvable, le paramètre throwOnError
spécifie si null
est retourné ou bien une exception est levée. Dans certains cas, une exception est levée indépendamment de la valeur de throwOnError
. Consultez la section Exceptions.
Exceptions
typeName
a la valeur null
.
Un initialiseur de classe est appelé et lève une exception.
throwOnError
a la valeur true
et le type est introuvable.
- ou -
throwOnError
a la valeur true
et typeName
contient des caractères non valides, tels qu’une tabulation incorporée.
- ou -
throwOnError
a la valeur true
et typeName
est une chaîne vide.
- ou -
throwOnError
a la valeur true
et typeName
représente un type de tableau avec une taille non valide.
- ou -
typeName
représente un tableau de TypedReference.
Une erreur se produit quand typeName
est analysé dans un nom de type et un nom d’assembly (par exemple, quand le nom de type simple inclut un caractère spécial sans séquence d’échappement).
- ou -
throwOnError
a la valeur true
et typeName
contient une syntaxe non valide (par exemple, « MyType[,*,] »).
- ou -
typeName
représente un type générique qui a un type pointeur, un type ByRef
ou Void comme l’un de ses arguments de type.
- ou -
typeName
représente un type générique qui a un nombre incorrect d’arguments de type.
- ou -
typeName
représente un type générique, et un de ses arguments de type ne satisfait pas aux contraintes pour le paramètre de type correspondant.
throwOnError
a la valeur true
, et l’assembly ou l’une de ses dépendances est introuvable.
L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.
- ou -
typeName
contient un nom d’assembly non valide.
- ou -
typeName
est un nom d’assembly valide sans nom de type.
L’assembly ou l’une de ses dépendances n’est pas un assembly valide pour le runtime actuellement chargé.
Remarques
Pour plus d’informations sur cette API, consultez Remarques supplémentaires sur l’API pour Type.GetType.
S’applique à
GetType()
- Source:
- Type.cs
- Source:
- Type.cs
- Source:
- Type.cs
Obtient le Type actuel.
public:
Type ^ GetType();
public:
virtual Type ^ GetType();
public Type GetType ();
override this.GetType : unit -> Type
Public Function GetType () As Type
Retours
Type actuel.
Implémente
Exceptions
Un initialiseur de classe est appelé et lève une exception.
Voir aussi
S’applique à
GetType(String)
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
Obtient le Type avec le nom spécifié, effectuant une recherche qui respecte la casse.
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
Paramètres
- typeName
- String
Nom qualifié d'assembly du type à obtenir. Consultez AssemblyQualifiedName. Si le type se trouve dans l’assembly en cours d’exécution ou dans mscorlib.dll/System.Private.CoreLib.dll, il suffit de fournir le nom de type qualifié par son espace de noms.
Retours
Type présentant le nom spécifié, s'il est trouvé ; sinon, null
.
Exceptions
typeName
a la valeur null
.
Un initialiseur de classe est appelé et lève une exception.
typeName
représente un type générique qui a un type pointeur, un type ByRef
ou Void comme l’un de ses arguments de type.
- ou -
typeName
représente un type générique qui a un nombre incorrect d’arguments de type.
- ou -
typeName
représente un type générique, et un de ses arguments de type ne satisfait pas aux contraintes pour le paramètre de type correspondant.
typeName
représente un type non valide, par exemple, un tableau de TypedReference.
L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.
Remarque : Dans .NET pour les applications du Windows Store ou la bibliothèque de classes portable, interceptez l’exception de la classe de base, IOException, à la place.
L’assembly n’est pas valide pour le runtime actuellement chargé.
Exemples
L’exemple suivant récupère le type de System.Int32
et utilise cet objet de type pour afficher la FullName propriété de System.Int32
.
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
Remarques
Vous pouvez utiliser la GetType méthode pour obtenir un Type objet pour un type dans un autre assembly si vous connaissez son nom qualifié d’assembly, qui peut être obtenu à partir de AssemblyQualifiedName.
GetType provoque le chargement de l’assembly spécifié dans typeName
. Vous pouvez également charger un assembly à l’aide de la Assembly.Load méthode , puis utiliser la Assembly.GetType méthode ou Assembly.GetTypes pour obtenir des Type objets. Si un type se trouve dans un assembly connu de votre programme au moment de la compilation, il est plus efficace d’utiliser typeof
en C# ou l’opérateur GetType
en Visual Basic.
Notes
S’il typeName
est introuvable, l’appel à la GetType(String) méthode retourne null
. Il ne lève pas d’exception. Pour contrôler si une exception est levée, appelez une surcharge de la GetType méthode qui a un throwOnError
paramètre.
GetType Fonctionne uniquement sur les assemblys chargés à partir du disque. Si vous appelez GetType pour rechercher un type défini dans un assembly dynamique défini à l’aide des System.Reflection.Emit services, vous risquez d’obtenir un comportement incohérent. Le comportement dépend si l’assembly dynamique est persistant, c’est-à-dire créé à l’aide des RunAndSave
modes d’accès ou Save
de l’énumération System.Reflection.Emit.AssemblyBuilderAccess . Si l’assembly dynamique est persistant et a été écrit sur le disque avant GetType
d’être appelé, le chargeur recherche l’assembly enregistré sur le disque, charge cet assembly et récupère le type à partir de cet assembly. Si l’assembly n’a pas été enregistré sur le disque quand GetType
est appelé, la méthode retourne null
.
GetType
ne comprend pas les assemblys dynamiques temporaires ; Par conséquent, l’appel GetType
de pour récupérer un type dans un assembly dynamique temporaire retourne null
.
Pour l’utiliser GetType
sur un module dynamique, abonnez-vous à l’événement AppDomain.AssemblyResolve et appelez GetType
avant d’enregistrer. Sinon, vous obtiendrez deux copies de l’assembly en mémoire.
Le tableau suivant montre quels membres d’une classe de base sont retournés par les méthodes lors de la Get
réflexion sur un type.
Type de membre | statique | Non statique |
---|---|---|
Constructeur | Non | Non |
Champ | Non | Oui. Un champ est toujours masqué par nom et signature. |
Événement | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (virtuelle et non virtuelle) peut être hide-by-name ou hide-by-name-and-signature. |
Type imbriqué | Non | Non |
Propriété | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Masquer par nom et signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés, les types de retour, les types de paramètres, les sentinelles et les conventions d’appel non managées. Il s’agit d’une comparaison binaire.
Pour la réflexion, les propriétés et les événements sont masqués par nom et signature. Si vous avez une propriété avec un accesseur get et un accesseur set dans la classe de base, mais que la classe dérivée n’a qu’un accesseur get, la propriété de classe dérivée masque la propriété de classe de base et vous ne pourrez pas accéder à l’élément setter sur la classe de base.
Les attributs personnalisés ne font pas partie du système de type commun.
Les tableaux ou les types COM ne sont pas recherchés, sauf s’ils ont déjà été chargés dans la table des classes disponibles.
typeName
peut être le nom de type qualifié par son espace de noms ou un nom qualifié d’assembly qui inclut une spécification de nom d’assembly. Consultez AssemblyQualifiedName.
Si typeName
inclut l’espace de noms, mais pas le nom de l’assembly, cette méthode recherche uniquement l’assembly de l’objet appelant et mscorlib.dll/System.Private.CoreLib.dll, dans cet ordre. Si typeName est complet avec le nom de l’assembly partiel ou complet, cette méthode recherche dans l’assembly spécifié. Si l’assembly a un nom fort, un nom d’assembly complet est requis.
La AssemblyQualifiedName propriété retourne un nom de type complet, y compris les types imbriqués, le nom de l’assembly et les arguments de type générique. Tous les compilateurs qui prennent en charge le Common Language Runtime émettent le nom simple d’une classe imbriquée, et la réflexion construit un nom entremêlé lorsqu’il est interrogé, conformément aux conventions suivantes.
Notes
L’architecture du processeur fait partie de l’identité d’assembly et peut être spécifiée dans le cadre de chaînes de nom d’assembly. Par exemple, « ProcessorArchitecture=msil ». Toutefois, elle n’est pas incluse dans la chaîne retournée par la AssemblyQualifiedName propriété, pour des raisons de compatibilité. Vous pouvez également charger des types en créant un AssemblyName objet et en le transmettant à une surcharge appropriée de la Load méthode. Vous pouvez ensuite utiliser la Assembly.GetType méthode pour charger des types à partir de l’assembly. Voir aussi AssemblyName.ProcessorArchitecture.
Délimiteur | Signification |
---|---|
barre oblique inverse (\) | Caractère d’échappement. |
Backtick (') | Précède un ou plusieurs chiffres représentant le nombre de paramètres de type, situés à la fin du nom d’un type générique. |
Crochets ([]) | Placer une liste d’arguments de type générique pour un type générique construit ; dans une liste d’arguments de type, entourez un type qualifié d’assembly. |
Virgule (,) | Précède le nom de l’assembly. |
Point (.) | Désigne les identificateurs d’espace de noms. |
Signe plus (+) | Précède une classe imbriquée. |
Par exemple, le nom complet d’une classe peut ressembler à ceci :
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Si l’espace de noms était TopNamespace.Sub+Namespace, la chaîne doit faire précéder le signe plus (+) d’un caractère d’échappement (\) pour empêcher son interprétation comme un séparateur d’imbrication. La réflexion émet cette chaîne comme suit :
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Un « ++ » devient « \+\+ », et un « \ » devient « \\ ».
Ce nom qualifié peut être conservé et utilisé ultérieurement pour charger le Type. Pour rechercher et charger un Type, utilisez GetType avec le nom de type uniquement ou avec le nom de type qualifié d’assembly. GetType avec le nom de type uniquement recherche dans l’assembly Type de l’appelant, puis dans l’assembly système. GetType avec le nom de type qualifié d’assembly recherche dans n’importe Type quel assembly.
Les noms de type peuvent inclure des caractères de fin qui indiquent des informations supplémentaires sur le type, telles que si le type est un type référence, un type pointeur ou un type tableau. Pour récupérer le nom de type sans ces caractères de fin, utilisez t.GetElementType().ToString()
, où t
est le type .
Les espaces sont pertinents dans tous les composants de nom de type à l’exception du nom de l’assembly. Dans le nom de l’assembly, les espaces avant le séparateur « , » sont pertinents, mais les espaces après le séparateur « , » sont ignorés.
Le nom d’un type générique se termine par un backtick (') suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de ce mangling de nom est de permettre aux compilateurs de prendre en charge les types génériques portant le même nom, mais avec des nombres différents de paramètres de type, se produisant dans la même étendue. Par exemple, la réflexion renvoie les noms Tuple`1
mutilés et Tuple`2
à partir des méthodes Tuple(Of T)
génériques et Tuple(Of T0, T1)
en Visual Basic, ou Tuple<T>
et Tuple<T0, T1>
en Visual C#.
Pour les types génériques, la liste d’arguments de type est placée entre crochets et les arguments de type sont séparés par des virgules. Par exemple, un générique Dictionary<TKey,TValue> a deux paramètres de type. Un Dictionary<TKey,TValue> de MyType
avec des clés de type String peut être représenté comme suit :
System.Collections.Generic.Dictionary`2[System.String,MyType]
Pour spécifier un type qualifié d’assembly dans une liste d’arguments de type, placez le type qualifié d’assembly entre crochets. Sinon, les virgules qui séparent les parties du nom qualifié d’assembly sont interprétées comme limitant les arguments de type supplémentaires. Par exemple, un Dictionary<TKey,TValue> de MyType
fromMyAssembly.dll, avec des clés de type String, peut être spécifié comme suit :
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Notes
Un type qualifié d’assembly peut être placé entre crochets uniquement lorsqu’il apparaît dans une liste de paramètres de type. Les règles pour la recherche de types qualifiés et non qualifiés dans les listes de paramètres de type sont les mêmes que les règles pour les types non génériques qualifiés et non qualifiés.
Les types nullables sont un cas spécial de types génériques. Par exemple, un nullable Int32 est représenté par la chaîne « System.Nullable'1[System.Int32] ».
Notes
En C#, C++ et Visual Basic, vous pouvez également obtenir des types nullables à l’aide d’opérateurs de type. Par exemple, le type nullable Boolean est retourné par typeof(Nullable<bool>)
en C#, par Nullable<Boolean>::typeid
en C++ et par GetType(Nullable(Of Boolean))
en Visual Basic.
Le tableau suivant montre la syntaxe que vous utilisez avec GetType
pour différents types.
Pour obtenir | Utiliser |
---|---|
Valeur Nullable Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Pointeur non managé vers MyType |
Type.GetType("MyType*") |
Pointeur non managé vers un pointeur vers MyType |
Type.GetType("MyType**") |
Pointeur managé ou référence à MyType |
Type.GetType("MyType&") . Notez que contrairement aux pointeurs, les références sont limitées à un niveau. |
Une classe parente et une classe imbriquée | Type.GetType("MyParentClass+MyNestedClass") |
Tableau unidimensionnel avec une limite inférieure de 0 | Type.GetType("MyType[]") |
Tableau unidimensionnel avec une limite inférieure inconnue | Type.GetType("MyType[*]") |
Tableau à n dimensions | Une virgule (,) entre crochets représente un total de n-1 fois. Par exemple, System.Object[,,] représente un tableau à trois dimensions Object . |
Tableau de tableaux unidimensionnels | Type.GetType("MyType[][]") |
Tableau rectangulaire à deux dimensions avec des limites inférieures inconnues | Type.GetType("MyType[,]") |
Un type générique avec un argument de type | Type.GetType("MyGenericType`1[MyType]") |
Un type générique avec deux arguments de type | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Un type générique avec deux arguments de type qualifiés d’assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Type générique qualifié d’assembly avec un argument de type qualifié d’assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Type générique dont l’argument de type est un type générique avec deux arguments de type | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Voir aussi
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Spécification des noms de types complets
S’applique à
GetType(String, Boolean)
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
Obtient le Type portant le nom spécifié, en effectuant une recherche respectant la casse et en spécifiant s'il faut lever une exception si le type est introuvable.
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
Paramètres
- typeName
- String
Nom qualifié d'assembly du type à obtenir. Consultez AssemblyQualifiedName. Si le type se trouve dans l’assembly en cours d’exécution ou dans mscorlib.dll/System.Private.CoreLib.dll, il suffit de fournir le nom de type qualifié par son espace de noms.
- throwOnError
- Boolean
true
pour lever une exception si le type est introuvable ; false
pour retourner null
.
false
supprime également d'autres conditions d'exception, mais pas toutes. Consultez la section Exceptions.
Retours
Type portant le nom spécifié. Si le type est introuvable, le paramètre throwOnError
spécifie si null
est retourné ou bien une exception est levée. Dans certains cas, une exception est levée indépendamment de la valeur de throwOnError
. Consultez la section Exceptions.
Exceptions
typeName
a la valeur null
.
Un initialiseur de classe est appelé et lève une exception.
throwOnError
a la valeur true
et le type est introuvable.
- ou -
throwOnError
a la valeur true
et typeName
contient des caractères non valides, tels qu’une tabulation incorporée.
- ou -
throwOnError
a la valeur true
et typeName
est une chaîne vide.
- ou -
throwOnError
a la valeur true
et typeName
représente un type de tableau avec une taille non valide.
- ou -
typeName
représente un tableau de TypedReference.
throwOnError
a la valeur true
et typeName
contient une syntaxe non valide. Par exemple, « MyType [, *,] ».
- ou -
typeName
représente un type générique qui a un type pointeur, un type ByRef
ou Void comme l’un de ses arguments de type.
- ou -
typeName
représente un type générique qui a un nombre incorrect d’arguments de type.
- ou -
typeName
représente un type générique, et un de ses arguments de type ne satisfait pas aux contraintes pour le paramètre de type correspondant.
throwOnError
a la valeur true
, et l’assembly ou l’une de ses dépendances est introuvable.
L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.
Remarque : Dans .NET pour les applications du Windows Store ou la bibliothèque de classes portable, interceptez l’exception de classe de base, IOException, à la place.
L’assembly ou l’une de ses dépendances n’est pas valide pour le runtime actuellement chargé.
Exemples
L’exemple suivant récupère le type de System.Int32
et utilise cet objet de type pour afficher la FullName propriété de System.Int32
. Si un objet de type fait référence à un assembly qui n’existe pas, cet exemple lève une exception.
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
Remarques
Vous pouvez utiliser la GetType méthode pour obtenir un Type objet pour un type dans un autre assembly si vous connaissez son nom qualifié d’assembly, qui peut être obtenu à partir de AssemblyQualifiedName.
GetType provoque le chargement de l’assembly spécifié dans typeName
. Vous pouvez également charger un assembly à l’aide de la Assembly.Load méthode , puis utiliser la Assembly.GetType méthode ou Assembly.GetTypes pour obtenir Type des objets. Si un type se trouve dans un assembly connu de votre programme au moment de la compilation, il est plus efficace d’utiliser typeof
en C# ou l’opérateur GetType
dans Visual Basic.
GetType
Fonctionne uniquement sur les assemblys chargés à partir du disque. Si vous appelez GetType
pour rechercher un type défini dans un assembly dynamique défini à l’aide des System.Reflection.Emit services, vous risquez d’obtenir un comportement incohérent. Le comportement varie selon que l’assembly dynamique est persistant, c’est-à-dire créé à l’aide des RunAndSave
modes d’accès ou Save
de l’énumération System.Reflection.Emit.AssemblyBuilderAccess . Si l’assembly dynamique est persistant et a été écrit sur le disque avant GetType
d’être appelé, le chargeur recherche l’assembly enregistré sur le disque, charge cet assembly et récupère le type à partir de cet assembly. Si l’assembly n’a pas été enregistré sur le disque quand GetType
est appelé, la méthode retourne null
.
GetType
ne comprend pas les assemblys dynamiques temporaires ; Par conséquent, l’appel GetType
de pour récupérer un type dans un assembly dynamique temporaire retourne null
.
Pour l’utiliser GetType
sur un module dynamique, abonnez-vous à l’événement AppDomain.AssemblyResolve et appelez GetType
avant d’enregistrer. Sinon, vous obtiendrez deux copies de l’assembly en mémoire.
Le throwOnError
paramètre spécifie ce qui se passe lorsque le type est introuvable et supprime également certaines autres conditions d’exception, comme décrit dans la section Exceptions. Certaines exceptions sont levées quelle que soit la valeur de throwOnError
. Par exemple, si le type est trouvé mais ne peut pas être chargé, un TypeLoadException est levée même si throwOnError
est false
.
Le tableau suivant montre quels membres d’une classe de base sont retournés par les méthodes lors de la Get
réflexion sur un type.
Type de membre | statique | Non statique |
---|---|---|
Constructeur | Non | Non |
Champ | Non | Oui. Un champ est toujours masqué par nom et signature. |
Événement | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (virtuelle et non virtuelle) peut être hide-by-name ou hide-by-name-and-signature. |
Type imbriqué | Non | Non |
Propriété | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Masquer par nom et signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés, les types de retour, les types de paramètres, les sentinelles et les conventions d’appel non managées. Il s’agit d’une comparaison binaire.
Pour la réflexion, les propriétés et les événements sont masqués par nom et signature. Si vous avez une propriété avec un accesseur get et un accesseur set dans la classe de base, mais que la classe dérivée n’a qu’un accesseur get, la propriété de classe dérivée masque la propriété de classe de base et vous ne pourrez pas accéder à l’élément setter sur la classe de base.
Les attributs personnalisés ne font pas partie du système de type commun.
Les tableaux ou les types COM ne sont pas recherchés, sauf s’ils ont déjà été chargés dans la table des classes disponibles.
typeName
peut être le nom de type qualifié par son espace de noms ou un nom qualifié d’assembly qui inclut une spécification de nom d’assembly. Consultez AssemblyQualifiedName.
Si typeName
inclut l’espace de noms, mais pas le nom de l’assembly, cette méthode recherche uniquement l’assembly de l’objet appelant et mscorlib.dll/System.Private.CoreLib.dll, dans cet ordre. Si typeName est complet avec le nom de l’assembly partiel ou complet, cette méthode recherche dans l’assembly spécifié. Si l’assembly a un nom fort, un nom d’assembly complet est requis.
La AssemblyQualifiedName propriété retourne un nom de type complet, y compris les types imbriqués, le nom de l’assembly et les arguments génériques. Tous les compilateurs qui prennent en charge le Common Language Runtime émettent le nom simple d’une classe imbriquée, et la réflexion construit un nom entremêlé lorsqu’il est interrogé, conformément aux conventions suivantes.
Notes
L’architecture du processeur fait partie de l’identité d’assembly et peut être spécifiée dans le cadre de chaînes de nom d’assembly. Par exemple, « ProcessorArchitecture=msil ». Toutefois, elle n’est pas incluse dans la chaîne retournée par la AssemblyQualifiedName propriété, pour des raisons de compatibilité. Vous pouvez également charger des types en créant un AssemblyName objet et en le transmettant à une surcharge appropriée de la Load méthode. Vous pouvez ensuite utiliser la Assembly.GetType méthode pour charger des types à partir de l’assembly. Voir aussi AssemblyName.ProcessorArchitecture.
Délimiteur | Signification |
---|---|
barre oblique inverse (\) | Caractère d’échappement. |
Backtick (') | Précède un ou plusieurs chiffres représentant le nombre de paramètres de type, situés à la fin du nom d’un type générique. |
Crochets ([]) | Placer une liste d’arguments de type générique pour un type générique construit ; dans une liste d’arguments de type, entourez un type qualifié d’assembly. |
Virgule (,) | Précède le nom de l’assembly. |
Point (.) | Désigne les identificateurs d’espace de noms. |
Signe plus (+) | Précède une classe imbriquée. |
Par exemple, le nom complet d’une classe peut ressembler à ceci :
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Si l’espace de noms était TopNamespace.Sub+Namespace, la chaîne doit faire précéder le signe plus (+) d’un caractère d’échappement (\) pour empêcher son interprétation comme un séparateur d’imbrication. La réflexion émet cette chaîne comme suit :
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Un « ++ » devient « \+\+ », et un « \ » devient « \\ ».
Ce nom qualifié peut être conservé et utilisé ultérieurement pour charger le Type. Pour rechercher et charger un Type, utilisez GetType avec le nom de type uniquement ou avec le nom de type qualifié d’assembly. GetType avec le nom de type uniquement recherche dans l’assembly Type de l’appelant, puis dans l’assembly système. GetType avec le nom de type qualifié d’assembly recherche dans n’importe Type quel assembly.
Les noms de type peuvent inclure des caractères de fin qui indiquent des informations supplémentaires sur le type, telles que si le type est un type référence, un type pointeur ou un type tableau. Pour récupérer le nom de type sans ces caractères de fin, utilisez t.GetElementType().ToString()
, où t
est le type .
Les espaces sont pertinents dans tous les composants de nom de type à l’exception du nom de l’assembly. Dans le nom de l’assembly, les espaces avant le séparateur « , » sont pertinents, mais les espaces après le séparateur « , » sont ignorés.
Le nom d’un type générique se termine par un backtick (') suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de ce mangling de nom est de permettre aux compilateurs de prendre en charge les types génériques portant le même nom, mais avec des nombres différents de paramètres de type, se produisant dans la même étendue. Par exemple, la réflexion renvoie les noms Tuple`1
mutilés et Tuple`2
à partir des méthodes Tuple(Of T)
génériques et Tuple(Of T0, T1)
en Visual Basic, ou Tuple<T>
et Tuple<T0, T1>
en Visual C#.
Pour les types génériques, la liste d’arguments de type est placée entre crochets et les arguments de type sont séparés par des virgules. Par exemple, un générique Dictionary<TKey,TValue> a deux paramètres de type. Un Dictionary<TKey,TValue> de MyType
avec des clés de type String peut être représenté comme suit :
System.Collections.Generic.Dictionary`2[System.String,MyType]
Pour spécifier un type qualifié d’assembly dans une liste d’arguments de type, placez le type qualifié d’assembly entre crochets. Sinon, les virgules qui séparent les parties du nom qualifié d’assembly sont interprétées comme limitant les arguments de type supplémentaires. Par exemple, un Dictionary<TKey,TValue> de MyType
de MyAssembly.dll, avec des clés de type String, peut être spécifié comme suit :
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Notes
Un type qualifié d’assembly peut être placé entre crochets uniquement lorsqu’il apparaît dans une liste de paramètres de type. Les règles pour la recherche de types qualifiés et non qualifiés dans les listes de paramètres de type sont les mêmes que les règles pour les types non génériques qualifiés et non qualifiés.
Les types nullables sont un cas spécial de types génériques. Par exemple, un nullable Int32 est représenté par la chaîne « System.Nullable'1[System.Int32] ».
Notes
En C#, C++ et Visual Basic, vous pouvez également obtenir des types nullables à l’aide d’opérateurs de type. Par exemple, le type nullable Boolean est retourné par typeof(Nullable<bool>)
en C#, par Nullable<Boolean>::typeid
en C++ et par GetType(Nullable(Of Boolean))
en Visual Basic.
Le tableau suivant montre la syntaxe que vous utilisez avec GetType
pour différents types.
Pour obtenir | Utiliser |
---|---|
Valeur Nullable Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Pointeur non managé vers MyType |
Type.GetType("MyType*") |
Pointeur non managé vers un pointeur vers MyType |
Type.GetType("MyType**") |
Pointeur managé ou référence à MyType |
Type.GetType("MyType&") . Notez que contrairement aux pointeurs, les références sont limitées à un niveau. |
Une classe parente et une classe imbriquée | Type.GetType("MyParentClass+MyNestedClass") |
Tableau unidimensionnel avec une limite inférieure de 0 | Type.GetType("MyArray[]") |
Tableau unidimensionnel avec une limite inférieure inconnue | Type.GetType("MyArray[*]") |
Tableau à n dimensions | Une virgule (,) entre crochets représente un total de n-1 fois. Par exemple, System.Object[,,] représente un tableau à trois dimensions Object . |
Tableau d’un tableau à deux dimensions | Type.GetType("MyArray[][]") |
Tableau rectangulaire à deux dimensions avec des limites inférieures inconnues | Type.GetType("MyArray[,]") |
Un type générique avec un argument de type | Type.GetType("MyGenericType`1[MyType]") |
Un type générique avec deux arguments de type | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Un type générique avec deux arguments de type qualifiés d’assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Type générique qualifié d’assembly avec un argument de type qualifié d’assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Type générique dont l’argument de type est un type générique avec deux arguments de type | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Voir aussi
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Spécification des noms de types complets
S’applique à
GetType(String, Boolean, Boolean)
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
Obtient le Type portant le nom spécifié, indiquant s'il faut lever une exception si le type est introuvable et s'il faut effectuer une recherche respectant la casse.
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
Paramètres
- typeName
- String
Nom qualifié d'assembly du type à obtenir. Consultez AssemblyQualifiedName. Si le type se trouve dans l’assembly en cours d’exécution ou dans mscorlib.dll/System.Private.CoreLib.dll, il suffit de fournir le nom de type qualifié par son espace de noms.
- throwOnError
- Boolean
true
pour lever une exception si le type est introuvable ; false
pour retourner null
.
false
supprime également d'autres conditions d'exception, mais pas toutes. Consultez la section Exceptions.
- ignoreCase
- Boolean
true
pour effectuer une recherche qui ne respecte pas la casse de typeName
et false
pour effectuer une recherche qui respecte la casse de typeName
.
Retours
Type portant le nom spécifié. Si le type est introuvable, le paramètre throwOnError
spécifie si null
est retourné ou bien une exception est levée. Dans certains cas, une exception est levée indépendamment de la valeur de throwOnError
. Consultez la section Exceptions.
Exceptions
typeName
a la valeur null
.
Un initialiseur de classe est appelé et lève une exception.
throwOnError
a la valeur true
et le type est introuvable.
- ou -
throwOnError
a la valeur true
et typeName
contient des caractères non valides, tels qu’une tabulation incorporée.
- ou -
throwOnError
a la valeur true
et typeName
est une chaîne vide.
- ou -
throwOnError
a la valeur true
et typeName
représente un type de tableau avec une taille non valide.
- ou -
typeName
représente un tableau de TypedReference.
throwOnError
a la valeur true
et typeName
contient une syntaxe non valide. Par exemple, « MyType [, *,] ».
- ou -
typeName
représente un type générique qui a un type pointeur, un type ByRef
ou Void comme l’un de ses arguments de type.
- ou -
typeName
représente un type générique qui a un nombre incorrect d’arguments de type.
- ou -
typeName
représente un type générique, et un de ses arguments de type ne satisfait pas aux contraintes pour le paramètre de type correspondant.
throwOnError
a la valeur true
, et l’assembly ou l’une de ses dépendances est introuvable.
L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.
L’assembly n’est pas valide pour le runtime actuellement chargé.
Remarques
Vous pouvez utiliser la GetType méthode pour obtenir un Type objet pour un type dans un autre assembly si vous connaissez son nom qualifié d’assembly, qui peut être obtenu à partir de AssemblyQualifiedName.
GetType provoque le chargement de l’assembly spécifié dans typeName
. Vous pouvez également charger un assembly à l’aide de la Assembly.Load méthode , puis utiliser la Assembly.GetType méthode ou Assembly.GetTypes pour obtenir Type des objets. Si un type se trouve dans un assembly connu de votre programme au moment de la compilation, il est plus efficace d’utiliser typeof
en C# ou l’opérateur GetType
dans Visual Basic.
GetType
Fonctionne uniquement sur les assemblys chargés à partir du disque. Si vous appelez GetType
pour rechercher un type défini dans un assembly dynamique défini à l’aide des System.Reflection.Emit services, vous risquez d’obtenir un comportement incohérent. Le comportement varie selon que l’assembly dynamique est persistant, c’est-à-dire créé à l’aide des RunAndSave
modes d’accès ou Save
de l’énumération System.Reflection.Emit.AssemblyBuilderAccess . Si l’assembly dynamique est persistant et a été écrit sur le disque avant GetType
d’être appelé, le chargeur recherche l’assembly enregistré sur le disque, charge cet assembly et récupère le type à partir de cet assembly. Si l’assembly n’a pas été enregistré sur le disque quand GetType
est appelé, la méthode retourne null
.
GetType
ne comprend pas les assemblys dynamiques temporaires ; Par conséquent, l’appel GetType
de pour récupérer un type dans un assembly dynamique temporaire retourne null
.
Pour l’utiliser GetType
sur un module dynamique, abonnez-vous à l’événement AppDomain.AssemblyResolve et appelez GetType
avant d’enregistrer. Sinon, vous obtiendrez deux copies de l’assembly en mémoire.
Le throwOnError
paramètre spécifie ce qui se passe lorsque le type est introuvable et supprime également certaines autres conditions d’exception, comme décrit dans la section Exceptions. Certaines exceptions sont levées quelle que soit la valeur de throwOnError
. Par exemple, si le type est trouvé mais ne peut pas être chargé, un TypeLoadException est levée même si throwOnError
est false
.
Le tableau suivant montre quels membres d’une classe de base sont retournés par les méthodes lors de la Get
réflexion sur un type.
Type de membre | statique | Non statique |
---|---|---|
Constructeur | Non | Non |
Champ | Non | Oui. Un champ est toujours masqué par nom et signature. |
Événement | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (virtuelle et non virtuelle) peut être hide-by-name ou hide-by-name-and-signature. |
Type imbriqué | Non | Non |
Propriété | Non applicable | La règle système de type courante est que l’héritage est identique à celui des méthodes qui implémentent la propriété . Reflection traite les propriétés comme masquage par nom et signature. Voir la note 2 ci-dessous. |
Masquer par nom et signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés, les types de retour, les types de paramètres, les sentinelles et les conventions d’appel non managées. Il s’agit d’une comparaison binaire.
Pour la réflexion, les propriétés et les événements sont masqués par nom et signature. Si vous avez une propriété avec un accesseur get et un accesseur set dans la classe de base, mais que la classe dérivée n’a qu’un accesseur get, la propriété de classe dérivée masque la propriété de classe de base et vous ne pourrez pas accéder à l’élément setter sur la classe de base.
Les attributs personnalisés ne font pas partie du système de type commun.
Les tableaux ou les types COM ne sont pas recherchés, sauf s’ils ont déjà été chargés dans la table des classes disponibles.
typeName
peut être le nom de type qualifié par son espace de noms ou un nom qualifié d’assembly qui inclut une spécification de nom d’assembly. Consultez AssemblyQualifiedName.
Si typeName
inclut l’espace de noms, mais pas le nom de l’assembly, cette méthode recherche uniquement l’assembly de l’objet appelant et mscorlib.dll/System.Private.CoreLib.dll, dans cet ordre. Si typeName est complet avec le nom de l’assembly partiel ou complet, cette méthode recherche dans l’assembly spécifié. Si l’assembly a un nom fort, un nom d’assembly complet est requis.
La AssemblyQualifiedName propriété retourne un nom de type complet, y compris les types imbriqués, le nom de l’assembly et les arguments de type. Tous les compilateurs qui prennent en charge le Common Language Runtime émettent le nom simple d’une classe imbriquée, et la réflexion construit un nom entremêlé lorsqu’il est interrogé, conformément aux conventions suivantes.
Notes
L’architecture du processeur fait partie de l’identité d’assembly et peut être spécifiée dans le cadre de chaînes de nom d’assembly. Par exemple, « ProcessorArchitecture=msil ». Toutefois, elle n’est pas incluse dans la chaîne retournée par la AssemblyQualifiedName propriété, pour des raisons de compatibilité. Vous pouvez également charger des types en créant un AssemblyName objet et en le transmettant à une surcharge appropriée de la Load méthode. Vous pouvez ensuite utiliser la Assembly.GetType méthode pour charger des types à partir de l’assembly. Voir aussi AssemblyName.ProcessorArchitecture.
Délimiteur | Signification |
---|---|
barre oblique inverse (\) | Caractère d’échappement. |
Backtick (') | Précède un ou plusieurs chiffres représentant le nombre de paramètres de type, situés à la fin du nom d’un type générique. |
Crochets ([]) | Placer une liste d’arguments de type générique pour un type générique construit ; dans une liste d’arguments de type, entourez un type qualifié d’assembly. |
Virgule (,) | Précède le nom de l’assembly. |
Point (.) | Désigne les identificateurs d’espace de noms. |
Signe plus (+) | Précède une classe imbriquée. |
Par exemple, le nom complet d’une classe peut ressembler à ceci :
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Si l’espace de noms était TopNamespace.Sub+Namespace, la chaîne doit faire précéder le signe plus (+) d’un caractère d’échappement (\) pour empêcher son interprétation comme un séparateur d’imbrication. La réflexion émet cette chaîne comme suit :
TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly
Un « ++ » devient « \+\+ », et un « \ » devient « \\ ».
Ce nom qualifié peut être conservé et utilisé ultérieurement pour charger le Type. Pour rechercher et charger un Type, utilisez GetType avec le nom de type uniquement ou avec le nom de type qualifié d’assembly. GetType avec le nom de type uniquement recherche dans l’assembly Type de l’appelant, puis dans l’assembly système. GetType avec le nom de type qualifié d’assembly recherche dans n’importe Type quel assembly.
Les noms de type peuvent inclure des caractères de fin qui indiquent des informations supplémentaires sur le type, telles que si le type est un type référence, un type pointeur ou un type tableau. Pour récupérer le nom de type sans ces caractères de fin, utilisez t.GetElementType().ToString()
, où t
est le type .
Les espaces sont pertinents dans tous les composants de nom de type à l’exception du nom de l’assembly. Dans le nom de l’assembly, les espaces avant le séparateur « , » sont pertinents, mais les espaces après le séparateur « , » sont ignorés.
Le nom d’un type générique se termine par un backtick (') suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de ce mangling de nom est de permettre aux compilateurs de prendre en charge les types génériques portant le même nom, mais avec des nombres différents de paramètres de type, se produisant dans la même étendue. Par exemple, la réflexion renvoie les noms Tuple`1
mutilés et Tuple`2
à partir des méthodes Tuple(Of T)
génériques et Tuple(Of T0, T1)
en Visual Basic, ou Tuple<T>
et Tuple<T0, T1>
en Visual C#.
Pour les types génériques, la liste d’arguments de type est placée entre crochets et les arguments de type sont séparés par des virgules. Par exemple, un générique Dictionary<TKey,TValue> a deux paramètres de type. Un Dictionary<TKey,TValue> de MyType
avec des clés de type String peut être représenté comme suit :
System.Collections.Generic.Dictionary`2[System.String,MyType]
Pour spécifier un type qualifié d’assembly dans une liste d’arguments de type, placez le type qualifié d’assembly entre crochets. Sinon, les virgules qui séparent les parties du nom qualifié d’assembly sont interprétées comme limitant les arguments de type supplémentaires. Par exemple, un Dictionary<TKey,TValue> de MyType
de MyAssembly.dll, avec des clés de type String, peut être spécifié comme suit :
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
Notes
Un type qualifié d’assembly peut être placé entre crochets uniquement lorsqu’il apparaît dans une liste de paramètres de type. Les règles pour la recherche de types qualifiés et non qualifiés dans les listes de paramètres de type sont les mêmes que les règles pour les types non génériques qualifiés et non qualifiés.
Les types nullables sont un cas spécial de types génériques. Par exemple, un nullable Int32 est représenté par la chaîne « System.Nullable'1[System.Int32] ».
Notes
En C#, C++ et Visual Basic, vous pouvez également obtenir des types nullables à l’aide d’opérateurs de type. Par exemple, le type nullable Boolean est retourné par typeof(Nullable<bool>)
en C#, par Nullable<Boolean>::typeid
en C++ et par GetType(Nullable(Of Boolean))
en Visual Basic.
Le tableau suivant montre la syntaxe que vous utilisez avec GetType
pour différents types.
Pour obtenir | Utiliser |
---|---|
Valeur Nullable Int32 | Type.GetType("System.Nullable`1[System.Int32]") |
Pointeur non managé vers MyType |
Type.GetType("MyType*") |
Pointeur non managé vers un pointeur vers MyType |
Type.GetType("MyType**") |
Pointeur managé ou référence à MyType |
Type.GetType("MyType&") . Notez que contrairement aux pointeurs, les références sont limitées à un niveau. |
Une classe parente et une classe imbriquée | Type.GetType("MyParentClass+MyNestedClass") |
Tableau unidimensionnel avec une limite inférieure de 0 | Type.GetType("MyArray[]") |
Tableau unidimensionnel avec une limite inférieure inconnue | Type.GetType("MyArray[*]") |
Tableau à n dimensions | Une virgule (,) entre crochets représente un total de n-1 fois. Par exemple, System.Object[,,] représente un tableau à trois dimensions Object . |
Tableau d’un tableau à deux dimensions | Type.GetType("MyArray[][]") |
Tableau rectangulaire à deux dimensions avec des limites inférieures inconnues | Type.GetType("MyArray[,]") |
Un type générique avec un argument de type | Type.GetType("MyGenericType`1[MyType]") |
Un type générique avec deux arguments de type | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Un type générique avec deux arguments de type qualifiés d’assembly | Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]") |
Type générique qualifié d’assembly avec un argument de type qualifié d’assembly | Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly") |
Type générique dont l’argument de type est un type générique avec deux arguments de type | Type.GetType("MyGenericType`1[AnotherGenericType`2[MyType,AnotherType]]") |
Voir aussi
- String
- TypeLoadException
- AssemblyQualifiedName
- GetAssembly(Type)
- GetType(String)
- AssemblyName
- Spécification des noms de types complets
S’applique à
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>)
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
Obtient le type avec le nom spécifié et éventuellement des méthodes personnalisées permettant de résoudre l'assembly et le type.
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
Paramètres
- typeName
- String
Nom du type à obtenir. Si le paramètre typeResolver
est fourni, le nom de type peut être n'importe quelle chaîne pouvant être résolue par typeResolver
. Si le assemblyResolver
paramètre est fourni ou si la résolution de type standard est utilisée, typeName
doit être un nom qualifié d’assembly (voir AssemblyQualifiedName), sauf si le type se trouve dans l’assembly en cours d’exécution ou dans mscorlib.dll/System.Private.CoreLib.dll, auquel cas il suffit de fournir le nom de type qualifié par son espace de noms.
- assemblyResolver
- Func<AssemblyName,Assembly>
Méthode qui trouve et retourne l'assembly spécifié dans typeName
. Le nom de l'assembly est passé à assemblyResolver
en tant qu'objet AssemblyName. Si typeName
ne contient pas le nom d'un assembly, assemblyResolver
n'est pas appelé. Si assemblyResolver
n'est pas fourni, une résolution d'assembly standard est effectuée.
Attention : ne passez pas de méthodes provenant d’appelants inconnus ou non approuvés. Vous risqueriez d'élever les privilèges du code malveillant. Utilisez uniquement les méthodes que vous fournissez ou avec lesquelles vous êtes familiarisé.
Méthode qui trouve et retourne le type spécifié par typeName
à partir de l'assembly retourné par assemblyResolver
ou par la résolution d'assembly standard. Si aucun assembly n'est fourni, la méthode typeResolver
peut en fournir un. La méthode prend également un paramètre qui spécifie s'il faut exécuter une recherche non sensible à la casse ; false
est passé à ce paramètre.
Attention : ne passez pas de méthodes provenant d’appelants inconnus ou non approuvés.
Retours
Type portant le nom spécifié, ou null
si le type est introuvable.
Exceptions
typeName
a la valeur null
.
Un initialiseur de classe est appelé et lève une exception.
Une erreur se produit quand typeName
est analysé dans un nom de type et un nom d’assembly (par exemple, quand le nom de type simple inclut un caractère spécial sans séquence d’échappement).
- ou -
typeName
représente un type générique qui a un type pointeur, un type ByRef
ou Void comme l’un de ses arguments de type.
- ou -
typeName
représente un type générique qui a un nombre incorrect d’arguments de type.
- ou -
typeName
représente un type générique, et un de ses arguments de type ne satisfait pas aux contraintes pour le paramètre de type correspondant.
typeName
représente un type non valide, par exemple, un tableau de TypedReference.
L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.
- ou -
typeName
contient un nom d’assembly non valide.
- ou -
typeName
est un nom d’assembly valide sans nom de type.
L’assembly ou l’une de ses dépendances n’est pas valide pour le runtime actuellement chargé.
Remarques
Vous trouverez des scénarios d’utilisation pour cette méthode et des détails sur les assemblyResolver
paramètres et typeResolver
dans la surcharge de méthode GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) .
Notes
Si typeName
est introuvable, l’appel à la GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) méthode retourne null
. Il ne lève pas d’exception. Pour contrôler si une exception est levée, appelez une surcharge de la GetType méthode qui a un throwOnError
paramètre .
L’appel de cette surcharge de méthode revient à appeler la GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) surcharge de méthode et à false
spécifier pour les throwOnError
paramètres et ignoreCase
.
S’applique à
GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean)
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
- Source:
- Type.CoreCLR.cs
Obtient le type portant le nom spécifié, en indiquant s'il faut lever une exception si le type est introuvable et, éventuellement, en fournissant des méthodes personnalisées qui permettent de résoudre l'assembly et le type.
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
Paramètres
- typeName
- String
Nom du type à obtenir. Si le paramètre typeResolver
est fourni, le nom de type peut être n'importe quelle chaîne pouvant être résolue par typeResolver
. Si le paramètre est fourni ou si une assemblyResolver
résolution de type standard est utilisée, typeName
doit être un nom qualifié d’assembly (voir AssemblyQualifiedName), sauf si le type se trouve dans l’assembly en cours d’exécution ou dans mscorlib.dll/System.Private.CoreLib.dll, auquel cas il suffit de fournir le nom de type qualifié par son espace de noms.
- assemblyResolver
- Func<AssemblyName,Assembly>
Méthode qui trouve et retourne l'assembly spécifié dans typeName
. Le nom de l'assembly est passé à assemblyResolver
en tant qu'objet AssemblyName. Si typeName
ne contient pas le nom d'un assembly, assemblyResolver
n'est pas appelé. Si assemblyResolver
n'est pas fourni, une résolution d'assembly standard est effectuée.
Attention : ne passez pas de méthodes d’appelants inconnus ou non approuvés. Vous risqueriez d'élever les privilèges du code malveillant. Utilisez uniquement les méthodes que vous fournissez ou avec lesquelles vous êtes familiarisé.
Méthode qui trouve et retourne le type spécifié par typeName
à partir de l'assembly retourné par assemblyResolver
ou par la résolution d'assembly standard. Si aucun assembly n'est fourni, la méthode peut en fournir un. La méthode prend également un paramètre qui spécifie s'il faut exécuter une recherche non sensible à la casse ; false
est passé à ce paramètre.
Attention : ne passez pas de méthodes d’appelants inconnus ou non approuvés.
- throwOnError
- Boolean
true
pour lever une exception si le type est introuvable ; false
pour retourner null
.
false
supprime également d'autres conditions d'exception, mais pas toutes. Consultez la section Exceptions.
Retours
Type portant le nom spécifié. Si le type est introuvable, le paramètre throwOnError
spécifie si null
est retourné ou bien une exception est levée. Dans certains cas, une exception est levée indépendamment de la valeur de throwOnError
. Consultez la section Exceptions.
Exceptions
typeName
a la valeur null
.
Un initialiseur de classe est appelé et lève une exception.
throwOnError
a la valeur true
et le type est introuvable.
- ou -
throwOnError
a la valeur true
et typeName
contient des caractères non valides, tels qu’une tabulation incorporée.
- ou -
throwOnError
a la valeur true
et typeName
est une chaîne vide.
- ou -
throwOnError
a la valeur true
et typeName
représente un type de tableau avec une taille non valide.
- ou -
typeName
représente un tableau de TypedReference.
Une erreur se produit quand typeName
est analysé dans un nom de type et un nom d’assembly (par exemple, quand le nom de type simple inclut un caractère spécial sans séquence d’échappement).
- ou -
throwOnError
a la valeur true
et typeName
contient une syntaxe non valide (par exemple, « MyType[,*,] »).
- ou -
typeName
représente un type générique qui a un type pointeur, un type ByRef
ou Void comme l’un de ses arguments de type.
- ou -
typeName
représente un type générique qui a un nombre incorrect d’arguments de type.
- ou -
typeName
représente un type générique, et un de ses arguments de type ne satisfait pas aux contraintes pour le paramètre de type correspondant.
throwOnError
a la valeur true
et l’assembly ou l’une de ses dépendances est introuvable.
- ou -
typeName
contient un nom d’assembly non valide.
- ou -
typeName
est un nom d’assembly valide sans nom de type.
L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.
L’assembly ou l’une de ses dépendances n’est pas valide pour le runtime actuellement chargé.
Remarques
Vous trouverez des scénarios d’utilisation pour cette méthode et des détails sur les assemblyResolver
paramètres et typeResolver
dans la surcharge de méthode GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) .
L’appel de cette surcharge de méthode revient à appeler la GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) surcharge de méthode et à false
spécifier pour le ignoreCase
paramètre.