Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Type.GetType méthode (String)

 

Date de publication : novembre 2016

Obtient le Type avec le nom spécifié, effectuant une recherche qui respecte la casse.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public static Type GetType(
	string typeName
)

Paramètres

typeName
Type: System.String

Nom qualifié d'assembly du type à obtenir. Consultez AssemblyQualifiedName. Si le type se trouve dans Mscorlib.dll ou l'assembly en cours d'exécution, il suffit de fournir le nom du type qualifié par son espace de noms.

Valeur de retour

Type: System.Type

Type présentant le nom spécifié, s'il est trouvé ; sinon, null.

Exception Condition
ArgumentNullException

typeName a la valeur null.

TargetInvocationException

Un initialiseur de classe est appelé et lève une exception.

ArgumentException

typeName représente un type générique qui a un type pointeur, un type ByRef ou Void comme 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.

TypeLoadException

typeName représente un tableau de TypedReference.

FileLoadException
System_CAPS_noteRemarque

Dans le .NET for Windows Store apps ou bibliothèque de classes Portable, intercepter l'exception de la classe de base, IOException, à la place.

L’assembly ou une de ses dépendances a été trouvé, mais n’a pas pu être chargé.

BadImageFormatException

L’assembly ou une de ses dépendances n’est pas valide.

ou

La version 2.0 ou ultérieure du Common Language Runtime est actuellement chargée, et l’assembly a été compilé avec une version ultérieure.

Vous pouvez utiliser la GetType méthode pour obtenir un Type de l’objet d’un type dans un autre assembly, si vous connaissez son nom qualifié d’espace de noms. GetType provoque le chargement de l’assembly spécifié dans typeName. Vous pouvez également charger un assembly à l’aide de la Load (méthode), puis utiliser le GetType ou GetTypes méthodes de la Assembly classe pour obtenir Type objets. Si un type est dans un assembly connu de votre programme au moment de la compilation, il est plus efficace d’utiliser en c#, GetType en Visual Basic ou c++.

System_CAPS_noteRemarque

Si typeName est introuvable, l’appel à la GetType(String) méthode renvoie 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 ayant un throwOnError paramètre.

GetTypeGetType ne fonctionne que 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 de la System.Reflection.Emit services, vous pouvez obtenir un comportement incohérent. Le comportement varie selon que l’assembly dynamique est persistant, autrement dit, créé à l’aide de la RunAndSave ou Save accéder aux modes de le System.Reflection.Emit.AssemblyBuilderAccess (énumération). Si l’assembly dynamique est persistant et s’il a été écrit sur le disque avant GetType est appelé, le chargeur recherche l’assembly enregistré sur le disque, charge l’assembly et récupère le type de cet assembly. Si l’assembly n’a pas été enregistré sur le disque lorsque GetType est appelée, la méthode retourne null. GetType ne comprend pas les assemblys dynamiques transitoires ; Par conséquent, l’appel GetType pour récupérer un type dans un transitoire assembly dynamique retourne null.

Pour utiliser GetType sur un module dynamique, abonnez-vous à la AppDomain.AssemblyResolve événements et les appels GetType avant l’enregistrement. Sinon, vous obtiendrez deux copies de l’assembly dans la mémoire.

Le tableau suivant présente les membres de classe de base sont retournés par la Get méthodes lors de la réflexion sur un type.

Type de membre

Statique

Non statique

Constructeur

Non

Non

Champ

Non

Oui. Un champ est toujours masquer-par-nom-et-signature.

Événement

Non applicable

La règle de système de type commun est que l’héritage est identique à celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme masquer-par-nom-et-signature. Voir la Remarque 2 ci-dessous.

Méthode

Non

Oui. Une méthode (virtuelle et non virtuels) permettre être masquer par nom ou masquer-par-nom-et-signature.

Type imbriqué

Non

Non

Propriété

Non applicable

La règle de système de type commun est que l’héritage est identique à celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme masquer-par-nom-et-signature. Voir la Remarque 2 ci-dessous.

  1. Masquer-par-nom-et-signature prend en compte toutes les parties de la signature, y compris les modificateurs personnalisés et types de retour, les types de paramètre, sentinelles, conventions d’appel non managées. Il s’agit d’une comparaison binaire.

  2. Pour la réflexion, les propriétés et événements sont masquer-par-nom-et-signature. Si vous avez une propriété avec une commande get et un accesseur set dans la classe de base, mais la classe dérivée possède uniquement un accesseur get, la propriété de la classe dérivée masque la propriété de classe de base, et vous ne pourrez pas accéder à l’accesseur Set sur la classe de base.

  3. Attributs personnalisés ne font pas partie du système de type commun.

Les tableaux ou types COM ne sont pas recherchés sauf si elles ont déjà été chargées dans la table des classes disponibles.

typeName 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 les assembly de l’objet appelant et dans Mscorlib.dll, dans cet ordre. Si typeName est qualifié avec le nom d’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.

Le AssemblyQualifiedName propriété retourne un nom de type qualifié complet, y compris les types imbriqués, le nom de l’assembly et des arguments de type générique. Tous les compilateurs qui prennent en charge le common language runtime émettront le nom simple d’une classe imbriquée et la réflexion construit un nom tronqué sur demande, conformément aux conventions suivantes.

System_CAPS_noteRemarque

Dans le .NET Framework version 2.0, architecture de processeur est ajoutée à l’identité de l’assembly et peut être spécifié en tant que partie de chaînes de nom d’assembly. Par exemple, « ProcessorArchitecture = msil ». Toutefois, il n’est pas inclus 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 passant à la surcharge appropriée de la Load méthode. Vous pouvez ensuite utiliser le 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.

Accent grave (')

Précède un ou plusieurs chiffres représentant le nombre de paramètres de type, situé à la fin du nom d’un type générique.

Entre crochets ([])

Placez une liste d’arguments de type générique, pour un type générique construit ; dans une liste d’arguments de type, placez un type qualifié d’assembly.

Virgule ()

Précède le nom de l’Assembly.

Point (.)

Indique les identificateurs d’espace de noms.

Signe plus (+)

Précède une classe imbriquée.

Par exemple, le nom qualifié complet pour une classe peut ressembler à ceci :

TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly

Si l’espace de noms était TopNamespace, la chaîne aurait précéder le signe plus (+) avec un caractère d’échappement (\) pour l’empêcher d’être interprété comme un séparateur d’imbrication. La réflexion génère cette chaîne comme suit :

TopNamespace.Sub\+Namespace.ContainingClass+NestedClass,MyAssembly

Un « ++ » devient « \ + \ + » et un « \ » devient « \\ ».

Ce nom qualifié peut être persistant et utilisé ultérieurement pour charger le Type. Pour rechercher et charger un Type, utilisez GetType avec le type de nom uniquement ou avec le nom de type qualifié d’assembly. GetType avec le type de nom uniquement recherchera le Type dans l’assembly de l’appelant, puis dans l’assembly système. GetType avec l’assembly de nom de type qualifié recherchera le Type dans n’importe quel assembly.

Noms de types peuvent inclure des caractères de fin qui apportent des précisions sur le type, par exemple si le type est un type référence, un type pointeur ou un type de 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 pertinentes dans tous les composants du nom de type, à l’exception du nom de l’assembly. Dans le nom de l’assembly, espaces avant le séparateur «, », mais les espaces après le séparateur «, » sont ignorés.

Le nom d’un type générique se termine par un accent grave (') suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de cette convention des noms est de permettre aux compilateurs prendre en charge des types génériques portant le même nom mais avec différents nombres de paramètres de type, qui se produisent dans la même portée. Par exemple, la réflexion retourne les noms tronqués Tuple`1 et Tuple`2 à partir des méthodes génériques Tuple(Of T) 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é entre crochets et les arguments de type sont séparés par des virgules. Par exemple, un type 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, mettez 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 délimitant les arguments de type supplémentaires. Par exemple, un Dictionary<TKey, TValue> de MyType deMyAssembly.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]]")
System_CAPS_noteRemarque

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 de recherche d’assemblys 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 Nullable sont un cas spécial de types génériques. Par exemple, un type nullable Int32 est représenté par la chaîne « System.Nullable'1[System.Int32] ».

System_CAPS_noteRemarque

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 type renvoyé par typeof(Nullable<bool>) en c#, par Nullable<Boolean>::typeid en C++ et par GetType(Nullable(Of Boolean)) dans Visual Basic.

Le tableau suivant montre la syntaxe à utiliser avec GetType pour divers types.

Pour obtenir

Utilisez

Un type nullable Int32

Type.GetType("System.Nullable`1[System.Int32]")

Un pointeur non managé vers MyType

Type.GetType("MyType*")

Un pointeur non managé vers un pointeur vers MyType

Type.GetType("MyType**")

Un pointeur managé ou la 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")

Un tableau unidimensionnel avec une limite inférieure de 0

Type.GetType("MyType[]")

Un tableau unidimensionnel avec une limite inférieure inconnue

Type.GetType("MyType[*]")

Un tableau à n dimensions

Une virgule (,) entre les crochets n-1 fois au total. Par exemple, System.Object[,,] représente un à trois dimensions Object tableau.

Un tableau de tableaux unidimensionnels

Type.GetType("MyType[][]")

Un 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é d’assembly

Type.GetType("MyGenericType`2[[MyType,MyAssembly],[AnotherType,AnotherAssembly]]")

Un type générique qualifié d’assembly avec un argument de type qualifié d’assembly

Type.GetType("MyGenericType`1[[MyType,MyAssembly]],MyGenericTypeAssembly")

Un 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]]")

L’exemple suivant récupère le type de System.Int32 et utilise cet objet type pour afficher le FullName propriété du System.Int32.

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: