Partager via


Type.GetType Méthode

Définition

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é.

typeResolver
Func<Assembly,String,Boolean,Type>

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.
  1. 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.

  2. 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.

  3. 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

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.
  1. 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.

  2. 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.

  3. 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

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.
  1. 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.

  2. 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.

  3. 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

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é.

typeResolver
Func<Assembly,String,Boolean,Type>

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é.

typeResolver
Func<Assembly,String,Boolean,Type>

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.

S’applique à