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() |
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) |
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.
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)
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 du 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 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 Windows ou la bibliothèque de classes Portable, interceptez l’exception de la classe de base,, à la IOException place.
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.
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
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 Assembly.GetTypes méthode ou pour récupérer 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' GetType
opérateur dans Visual Basic.
Notes
Si typeName
est introuvable, l’appel à la GetType(String) méthode retourne null
. Elle 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 pouvez obtenir un comportement incohérent. Le comportement varie selon que l’assembly dynamique est persistant, c’est-à-dire créé à l’aide RunAndSave
Save
des modes d’accès ou de l' System.Reflection.Emit.AssemblyBuilderAccess énumération. Si l’assembly dynamique est persistant et a été écrit sur le disque avant que GetType
ne soit appelé, le chargeur recherche l’assembly enregistré sur le disque, charge cet 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é, la méthode retourne null
. GetType
ne comprend pas les assemblys dynamiques transitoires ; par conséquent, GetType
l’appel de pour récupérer un type dans un assembly dynamique transitoire retourne null
.
Pour utiliser GetType
sur un module dynamique, abonnez-vous à l' AppDomain.AssemblyResolve événement et appelez GetType
avant d’enregistrer. Dans le cas contraire, vous obtiendrez deux copies de l’assembly en mémoire.
Le tableau suivant indique les membres d’une classe de base qui sont retournés par les 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 masqué par nom-et-signature. |
Événement | Non applicable | La règle de système de type commun est que l’héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (à la fois virtuelles et non virtuelles) peut être masquée ou masquée-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 le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous. |
Hide-by-Name-and-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 a uniquement un accesseur Get, la propriété de la classe dérivée masque la propriété de la classe de base, et vous ne pouvez pas accéder à la méthode 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 comprend une spécification de nom d’assembly. Consultez AssemblyQualifiedName.
Si typeName
comprend 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 qualifié complet 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.
La AssemblyQualifiedName propriété retourne un nom de type qualifié 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 tronqué lorsqu’il est interrogé, conformément aux conventions suivantes.
Notes
dans le .NET Framework version 2,0, architecture du processeur est ajouté à l’identité de l’assembly et peut être spécifié dans le cadre des 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 à 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. |
Tops (') | 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 ([]) | 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 des identificateurs d’espace de noms. |
Signe plus (+) | Précède une classe imbriquée. |
Par exemple, le nom qualifié complet d’une classe peut se présenter comme suit :
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Si l’espace de noms était à l’espace de noms. sous + espace de noms, la chaîne devra précéder le signe plus (+) d’un caractère d’échappement ( \ ) pour l’empêcher d’être interprété 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 persistant et utilisé ultérieurement pour charger Type . Pour rechercher et charger un Type , utilisez GetType soit avec le nom de type uniquement, soit avec le nom de type qualifié d’assembly. GetType avec le nom de type, recherche uniquement Type dans l’assembly de l’appelant, puis dans l’assembly système. GetType avec le nom de type qualifié d’assembly, recherche le Type dans n’importe quel assembly.
Les noms de types peuvent inclure des caractères de fin qui désignent des informations supplémentaires sur le type, par exemple si le type est un type référence, un type pointeur ou un type tableau. Pour récupérer le nom du 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 situés 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 accent ( ` ) suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de cette gestion de noms est de permettre aux compilateurs de 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)
de 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 dé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 de recherche d’assemblys pour les 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 Nullable Int32 est représenté par la chaîne « System. Nullable » 1 [System. Int32]».
Notes
en C#, C++ et Visual Basic vous pouvez également récupérer des types nullable à l’aide d’opérateurs de type. Par exemple, le Boolean type Nullable est retourné 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 que vous utilisez avec GetType
pour différents types.
Pour accéder | Utilisez |
---|---|
Valeur null 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 | Virgule (,) à l’intérieur des crochets 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 limites inférieures inconnues | Type.GetType("MyType[,]") |
Type générique avec un argument de type | Type.GetType("MyGenericType`1[MyType]") |
Type générique avec deux arguments de type | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Type générique avec deux arguments de type qualifiés par un 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 qualifiés complets
S’applique à
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.
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 du 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 valeurtrue
ettypeName
contient des caractères non valides, tels qu’une tabulation incorporée.ou -
throwOnError
a la valeurtrue
ettypeName
est une chaîne vide.ou -
throwOnError
a la valeurtrue
ettypeName
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 typeByRef
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 Windows ou la bibliothèque de classes Portable, interceptez l’exception de la classe de base,, à la IOException place.
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.
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
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 Assembly.GetTypes méthode ou pour récupérer 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' GetType
opérateur 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 pouvez obtenir un comportement incohérent. Le comportement varie selon que l’assembly dynamique est persistant, c’est-à-dire créé à l’aide RunAndSave
Save
des modes d’accès ou de l' System.Reflection.Emit.AssemblyBuilderAccess énumération. Si l’assembly dynamique est persistant et a été écrit sur le disque avant que GetType
ne soit appelé, le chargeur recherche l’assembly enregistré sur le disque, charge cet 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é, la méthode retourne null
. GetType
ne comprend pas les assemblys dynamiques transitoires ; par conséquent, GetType
l’appel de pour récupérer un type dans un assembly dynamique transitoire retourne null
.
Pour utiliser GetType
sur un module dynamique, abonnez-vous à l' AppDomain.AssemblyResolve événement et appelez GetType
avant d’enregistrer. Dans le cas contraire, vous obtiendrez deux copies de l’assembly en mémoire.
Le throwOnError
paramètre spécifie ce qui se produit 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 indépendamment de la valeur de throwOnError
. Par exemple, si le type est trouvé mais ne peut pas être chargé, une TypeLoadException est levée même si throwOnError
est false
.
Le tableau suivant indique les membres d’une classe de base qui sont retournés par les 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 masqué par nom-et-signature. |
Événement | Non applicable | La règle de système de type commun est que l’héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (à la fois virtuelles et non virtuelles) peut être masquée ou masquée-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 le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous. |
Hide-by-Name-and-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 a uniquement un accesseur Get, la propriété de la classe dérivée masque la propriété de la classe de base, et vous ne pouvez pas accéder à la méthode 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 comprend une spécification de nom d’assembly. Consultez AssemblyQualifiedName.
Si typeName
comprend 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 qualifié complet 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.
La AssemblyQualifiedName propriété retourne un nom de type qualifié 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 tronqué lorsqu’il est interrogé, conformément aux conventions suivantes.
Notes
dans le .NET Framework version 2,0, architecture du processeur est ajouté à l’identité de l’assembly et peut être spécifié dans le cadre des 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 à 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. |
Tops (') | 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 ([]) | 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 des identificateurs d’espace de noms. |
Signe plus (+) | Précède une classe imbriquée. |
Par exemple, le nom qualifié complet d’une classe peut se présenter comme suit :
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Si l’espace de noms était à l’espace de noms. sous + espace de noms, la chaîne devra précéder le signe plus (+) d’un caractère d’échappement ( \ ) pour l’empêcher d’être interprété 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 persistant et utilisé ultérieurement pour charger Type . Pour rechercher et charger un Type , utilisez GetType soit avec le nom de type uniquement, soit avec le nom de type qualifié d’assembly. GetType avec le nom de type, recherche uniquement Type dans l’assembly de l’appelant, puis dans l’assembly système. GetType avec le nom de type qualifié d’assembly, recherche le Type dans n’importe quel assembly.
Les noms de types peuvent inclure des caractères de fin qui désignent des informations supplémentaires sur le type, par exemple si le type est un type référence, un type pointeur ou un type tableau. Pour récupérer le nom du 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 situés 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 accent ( ` ) suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de cette gestion de noms est de permettre aux compilateurs de 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)
de 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 délimitant les arguments de type supplémentaires. Par exemple, un Dictionary<TKey,TValue> de MyType
à partir 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 de recherche d’assemblys pour les 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 Nullable Int32 est représenté par la chaîne « System. Nullable » 1 [System. Int32]».
Notes
en C#, C++ et Visual Basic vous pouvez également récupérer des types nullable à l’aide d’opérateurs de type. Par exemple, le Boolean type Nullable est retourné 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 que vous utilisez avec GetType
pour différents types.
Pour accéder | Utilisez |
---|---|
Valeur null 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 | Virgule (,) à l’intérieur des crochets 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 limites inférieures inconnues | Type.GetType("MyArray[,]") |
Type générique avec un argument de type | Type.GetType("MyGenericType`1[MyType]") |
Type générique avec deux arguments de type | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Type générique avec deux arguments de type qualifiés par un 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 qualifiés complets
S’applique à
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.
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 du 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 valeurtrue
ettypeName
contient des caractères non valides, tels qu’une tabulation incorporée.ou -
throwOnError
a la valeurtrue
ettypeName
est une chaîne vide.ou -
throwOnError
a la valeurtrue
ettypeName
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 typeByRef
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 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.
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 Assembly.GetTypes méthode ou pour récupérer 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' GetType
opérateur 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 pouvez obtenir un comportement incohérent. Le comportement varie selon que l’assembly dynamique est persistant, c’est-à-dire créé à l’aide RunAndSave
Save
des modes d’accès ou de l' System.Reflection.Emit.AssemblyBuilderAccess énumération. Si l’assembly dynamique est persistant et a été écrit sur le disque avant que GetType
ne soit appelé, le chargeur recherche l’assembly enregistré sur le disque, charge cet 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é, la méthode retourne null
. GetType
ne comprend pas les assemblys dynamiques transitoires ; par conséquent, GetType
l’appel de pour récupérer un type dans un assembly dynamique transitoire retourne null
.
Pour utiliser GetType
sur un module dynamique, abonnez-vous à l' AppDomain.AssemblyResolve événement et appelez GetType
avant d’enregistrer. Dans le cas contraire, vous obtiendrez deux copies de l’assembly en mémoire.
Le throwOnError
paramètre spécifie ce qui se produit 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 indépendamment de la valeur de throwOnError
. Par exemple, si le type est trouvé mais ne peut pas être chargé, une TypeLoadException est levée même si throwOnError
est false
.
Le tableau suivant indique les membres d’une classe de base qui sont retournés par les 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 masqué par nom-et-signature. |
Événement | Non applicable | La règle de système de type commun est que l’héritage est le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous. |
Méthode | Non | Oui. Une méthode (à la fois virtuelles et non virtuelles) peut être masquée ou masquée-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 le même que celui des méthodes qui implémentent la propriété. La réflexion traite les propriétés comme étant masquées-par-nom-et-signature. Voir la remarque 2 ci-dessous. |
Hide-by-Name-and-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 a uniquement un accesseur Get, la propriété de la classe dérivée masque la propriété de la classe de base, et vous ne pouvez pas accéder à la méthode 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 comprend une spécification de nom d’assembly. Consultez AssemblyQualifiedName.
Si typeName
comprend 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 qualifié complet 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.
La AssemblyQualifiedName propriété retourne un nom de type qualifié 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 tronqué lorsqu’il est interrogé, conformément aux conventions suivantes.
Notes
dans le .NET Framework version 2,0, architecture du processeur est ajouté à l’identité de l’assembly et peut être spécifié dans le cadre des 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 à 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. |
Tops (') | 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 ([]) | 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 des identificateurs d’espace de noms. |
Signe plus (+) | Précède une classe imbriquée. |
Par exemple, le nom qualifié complet d’une classe peut se présenter comme suit :
TopNamespace.SubNameSpace.ContainingClass+NestedClass,MyAssembly
Si l’espace de noms était à l’espace de noms. sous + espace de noms, la chaîne devra précéder le signe plus (+) d’un caractère d’échappement ( \ ) pour l’empêcher d’être interprété 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 persistant et utilisé ultérieurement pour charger Type . Pour rechercher et charger un Type , utilisez GetType soit avec le nom de type uniquement, soit avec le nom de type qualifié d’assembly. GetType avec le nom de type, recherche uniquement Type dans l’assembly de l’appelant, puis dans l’assembly système. GetType avec le nom de type qualifié d’assembly, recherche le Type dans n’importe quel assembly.
Les noms de types peuvent inclure des caractères de fin qui désignent des informations supplémentaires sur le type, par exemple si le type est un type référence, un type pointeur ou un type tableau. Pour récupérer le nom du 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 situés 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 accent ( ` ) suivi de chiffres représentant le nombre d’arguments de type générique. L’objectif de cette gestion de noms est de permettre aux compilateurs de 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)
de 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 délimitant les arguments de type supplémentaires. Par exemple, un Dictionary<TKey,TValue> de MyType
à partir 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 de recherche d’assemblys pour les 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 Nullable Int32 est représenté par la chaîne « System. Nullable » 1 [System. Int32]».
Notes
en C#, C++ et Visual Basic vous pouvez également récupérer des types nullable à l’aide d’opérateurs de type. Par exemple, le Boolean type Nullable est retourné 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 que vous utilisez avec GetType
pour différents types.
Pour accéder | Utilisez |
---|---|
Valeur null 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 | Virgule (,) à l’intérieur des crochets 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 limites inférieures inconnues | Type.GetType("MyArray[,]") |
Type générique avec un argument de type | Type.GetType("MyGenericType`1[MyType]") |
Type générique avec deux arguments de type | Type.GetType("MyGenericType`2[MyType,AnotherType]") |
Type générique avec deux arguments de type qualifiés par un 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 qualifiés complets
S’applique à
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.
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 paramètre assemblyResolver
est fourni ou si la résolution de type standard est utilisée, typeName
doit être un nom d’assembly complet (consultez AssemblyQualifiedName), à moins que le type ne 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 fiables. 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 fiables.
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 typeByRef
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 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 une de ses dépendances n’est pas valide.
- ou -
L’assembly a été compilé avec une version du Common Language Runtime postérieure à la version actuellement chargée.
Remarques
Les scénarios d’utilisation de cette méthode et des détails sur les assemblyResolver
paramètres et se typeResolver
trouvent dans la GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) surcharge de méthode.
Notes
Si typeName
est introuvable, l’appel à la GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) méthode retourne null
. Elle 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 est identique à l’appel GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) de la surcharge de méthode et à la spécification false
des throwOnError
ignoreCase
paramètres et.
S’applique à
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.
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 assemblyResolver
est fourni ou si la résolution de type standard est utilisée, typeName
doit être un nom d’assembly complet (consultez AssemblyQualifiedName), à moins que le type ne 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 fiables. 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 provenant d’appelants inconnus ou non fiables.
- 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 valeurtrue
ettypeName
contient des caractères non valides, tels qu’une tabulation incorporée.ou -
throwOnError
a la valeurtrue
ettypeName
est une chaîne vide.ou -
throwOnError
a la valeurtrue
ettypeName
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 valeurtrue
ettypeName
contient une syntaxe non valide (par exemple, « MyType[,*,] »).ou -
typeName
représente un type générique qui a un type pointeur, un typeByRef
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 une de ses dépendances n’est pas valide.
- ou -
L’assembly a été compilé avec une version du Common Language Runtime postérieure à la version actuellement chargée.
Remarques
Les scénarios d’utilisation de cette méthode et des détails sur les assemblyResolver
paramètres et se typeResolver
trouvent dans la GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) surcharge de méthode.
L’appel de cette surcharge de méthode est identique à l’appel GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean, Boolean) de la surcharge de méthode et à la spécification false
de pour le ignoreCase
paramètre.
S’applique à
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.
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 assemblyResolver
est fourni ou si la résolution de type standard est utilisée, typeName
doit être un nom d’assembly complet (consultez AssemblyQualifiedName), à moins que le type ne 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 fiables. 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 provenant d’appelants inconnus ou non fiables.
- 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 valeurtrue
ettypeName
contient des caractères non valides, tels qu’une tabulation incorporée.ou -
throwOnError
a la valeurtrue
ettypeName
est une chaîne vide.ou -
throwOnError
a la valeurtrue
ettypeName
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 valeurtrue
ettypeName
contient une syntaxe non valide (par exemple, « MyType[,*,] »).ou -
typeName
représente un type générique qui a un type pointeur, un typeByRef
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 une de ses dépendances n’est pas valide.
- ou -
L’assembly a été compilé avec une version du Common Language Runtime postérieure à la version actuellement chargée.
Remarques
Utilisez cette surcharge de méthode et ses surcharges associées ( GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>) et GetType(String, Func<AssemblyName,Assembly>, Func<Assembly,String,Boolean,Type>, Boolean) ) pour remplacer l’implémentation par défaut de la GetType méthode par des implémentations plus flexibles. En fournissant vos propres méthodes qui résolvent les noms de types et les noms des assemblys qui les contiennent, vous pouvez effectuer les opérations suivantes :
Contrôler la version d’un assembly à partir de laquelle un type est chargé.
Fournissez un autre emplacement pour rechercher un nom de type qui n’inclut pas de nom d’assembly.
Charger les assemblys à l’aide de noms d’assemblys partiels.
Retourne les sous-classes de System.Type qui ne sont pas créées par le Common Language Runtime (CLR).
Par exemple, dans la sérialisation avec tolérance de version, cette méthode vous permet de rechercher un assembly « adapté » à l’aide d’un nom partiel. D’autres surcharges de la GetType méthode requièrent un nom de type qualifié d’assembly, qui comprend le numéro de version.
D’autres implémentations du système de type devront peut-être retourner des sous-classes de System.Type qui ne sont pas créées par le CLR ; tous les types retournés par d’autres surcharges de la GetType méthode sont des types au moment de l’exécution.
Remarques sur l’utilisation
Cette surcharge de méthode et ses surcharges associées analysent typeName
le nom d’un type et le nom d’un assembly, puis résolvent les noms. La résolution du nom de l’assembly se produit avant la résolution du nom de type, car un nom de type doit être résolu dans le contexte d’un assembly.
Notes
Si vous n’êtes pas familiarisé avec le concept de noms de types qualifiés d’assembly, consultez la AssemblyQualifiedName propriété.
Si typeName
n’est pas un nom qualifié d’assembly, la résolution de l’assembly est ignorée. Les noms de types non qualifiés peuvent être résolus dans le contexte d' mscorlib.dll/System.Private.CoreLib.dll ou de l’assembly en cours d’exécution, ou vous pouvez éventuellement fournir un assembly dans le typeResolver
paramètre. Les effets de l’inclusion ou de l’omission du nom de l’assembly pour différents types de résolution de noms s’affichent sous la forme d’un tableau dans la section résolution de noms mixtes .
Remarques sur l’utilisation générale :
Ne transmettez pas de méthodes à
assemblyResolver
outypeResolver
si elles proviennent d’appelants inconnus ou non fiables. Utilisez uniquement les méthodes que vous fournissez ou avec lesquelles vous êtes familiarisé.Attention
L’utilisation de méthodes provenant d’appelants inconnus ou non approuvés peut entraîner une élévation de privilèges pour du code malveillant.
Si vous omettez les
assemblyResolver
paramètres et/outypeResolver
, la valeur duthrowOnError
paramètre est passée aux méthodes qui effectuent la résolution par défaut.Si
throwOnError
a la valeurtrue
, cette méthode lève une exception TypeLoadException lorsquetypeResolver
retournenull
, et un FileNotFoundException lorsqueassemblyResolver
retournenull
.Cette méthode n’intercepte pas les exceptions levées par
assemblyResolver
ettypeResolver
. Vous êtes responsable de toutes les exceptions levées par les méthodes de résolution.
Résoudre des assemblys
La assemblyResolver
méthode reçoit un AssemblyName objet, qui est produit en analysant le nom de l’assembly de chaîne inclus dans typeName
. Si typeName
ne contient pas de nom d’assembly, assemblyResolver
n’est pas appelé et null
est passé à typeResolver
.
Si assemblyResolver
n’est pas fourni, la détection d’assembly standard est utilisée pour localiser l’assembly. Si assemblyResolver
est fourni, la GetType méthode n’effectue pas de détection standard. dans ce cas, vous devez vous assurer que votre assemblyResolver
peut gérer tous les assemblys que vous lui transmettez.
La assemblyResolver
méthode doit retourner null
si l’assembly ne peut pas être résolu. Si assemblyResolver
retourne null
, typeResolver
n’est pas appelé et aucun traitement supplémentaire n’est effectué ; en outre, si throwOnError
a true
la valeur, une FileNotFoundException est levée.
Si le AssemblyName passé à assemblyResolver
est un nom partiel, une ou plusieurs de ses parties sont null
. Par exemple, s’il n’a pas de version, la Version propriété est null
. Si la Version propriété, la CultureInfo propriété et la GetPublicKeyToken méthode retournent toutes null
, seul le nom simple de l’assembly a été fourni. La assemblyResolver
méthode peut utiliser ou ignorer toutes les parties du nom de l’assembly.
Les effets des différentes options de résolution d’assembly s’affichent sous la forme d’un tableau dans la section résolution de noms mixtes , pour les noms de type simple et qualifié d’assembly.
Résolution des types
Si typeName
ne spécifie pas de nom d’assembly, typeResolver
est toujours appelé. Si typeName
spécifie un nom d’assembly, typeResolver
est appelé uniquement lorsque le nom de l’assembly est résolu avec succès. Si assemblyResolver
ou la détection d’assembly standard retourne null
, typeResolver
n’est pas appelé.
La typeResolver
méthode reçoit trois arguments :
Assembly à rechercher ou
null
sitypeName
ne contient pas de nom d’assembly.Nom simple du type. Dans le cas d’un type imbriqué, il s’agit du type contenant le plus à l’extérieur. Dans le cas d’un type générique, il s’agit du nom simple du type générique.
Valeur booléenne qui est
true
si la casse des noms de types doit être ignorée.
L’implémentation détermine la façon dont ces arguments sont utilisés. La typeResolver
méthode doit retourner null
si elle ne peut pas résoudre le type. Si typeResolver
retourne null
et throwOnError
est true
, cette surcharge de GetType lève une TypeLoadException .
Les effets des différentes options de résolution de type s’affichent sous la forme d’un tableau dans la section résolution de noms mixtes , pour les noms de type simple et qualifié d’assembly.
Résolution de types imbriqués
Si typeName
est un type imbriqué, seul le nom du type conteneur le plus à l’extérieur est passé à typeResolver
. Quand typeResolver
retourne ce type, la GetNestedType méthode est appelée de manière récursive jusqu’à ce que le type imbriqué le plus profond ait été résolu.
Résolution des types génériques
GetTypeEst appelé de manière récursive pour résoudre les types génériques : tout d’abord pour résoudre le type générique lui-même, puis pour résoudre ses arguments de type. Si un argument de type est générique, GetType est appelé de manière récursive pour résoudre ses arguments de type, et ainsi de suite.
La combinaison de assemblyResolver
et typeResolver
que vous fournissez doit être capable de résoudre tous les niveaux de cette récurrence. Par exemple, supposons que vous fournissiez un assemblyResolver
qui contrôle le chargement de MyAssembly
. Supposons que vous souhaitiez résoudre le type générique Dictionary<string, MyType>
( Dictionary(Of String, MyType)
en Visual Basic). Vous pouvez passer le nom de type générique suivant :
"System.Collections.Generic.Dictionary`2[System.String,[MyNamespace.MyType, MyAssembly]]"
Notez que MyType
est le seul argument de type qualifié d’assembly. Les noms des Dictionary<TKey,TValue> classes et ne String sont pas qualifiés par assembly. Vous typeResolver
devez être en mesure de gérer un assembly ou null
, car il recevra null
pour Dictionary<TKey,TValue> et String . Il peut gérer ce cas en appelant une surcharge de la GetType méthode qui prend une chaîne, car les deux noms de types non qualifiés se trouvent dans mscorlib.dll/System.Private.CoreLib.dll :
Type t = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") : null,
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore)
);
La assemblyResolver
méthode n’est pas appelée pour le type de dictionnaire et le type de chaîne, car ces noms de types ne sont pas qualifiés par un assembly.
Supposons à présent qu’au lieu de System.String
, le premier type d’argument générique est YourType
, de YourAssembly
:
"System.Collections.Generic.Dictionary`2[[YourNamespace.YourType, YourAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null], [MyNamespace.MyType, MyAssembly]]"
Étant donné que cet assembly n’est ni mscorlib.dll/System.Private.CoreLib.dll ni à l’assembly en cours d’exécution, vous ne pouvez pas résoudre YourType
sans un nom qualifié d’assembly. Étant donné que votre assemblyResolve
sera appelé de manière récursive, il doit être en mesure de gérer ce cas. Au lieu de retourner des null
assemblys autres que MyAssembly
, il effectue maintenant un chargement d’assembly à l’aide de l' AssemblyName objet fourni.
Type t2 = Type.GetType(test,
(aName) => aName.Name == "MyAssembly" ?
Assembly.LoadFrom(@".\MyPath\v5.0\MyAssembly.dll") :
Assembly.Load(aName),
(assem, name, ignore) => assem == null ?
Type.GetType(name, false, ignore) :
assem.GetType(name, false, ignore), true
);
Retour aux Remarques d’utilisation.
Résolution de noms de types avec des caractères spéciaux
Certains caractères ont des significations spéciales dans les noms qualifiés d’assembly. Si un nom de type simple contient ces caractères, les caractères entraînent des erreurs d’analyse lorsque le nom simple fait partie d’un nom qualifié d’assembly. Pour éviter les erreurs d’analyse, vous devez placer les caractères spéciaux dans une séquence d’échappement à l’aide d’une barre oblique inverse avant de pouvoir passer le nom qualifié d’assembly à la GetType méthode. Par exemple, si un type est nommé Strange]Type
, le caractère d’échappement doit être ajouté avant le crochet comme suit : Strange\]Type
.
Notes
les noms avec ces caractères spéciaux ne peuvent pas être créés en Visual Basic ou en C#, mais ils peuvent être créés à l’aide du langage msil (Microsoft intermediate language) ou en émettant des assemblys dynamiques.
Le tableau suivant présente les caractères spéciaux pour les noms de types.
Caractère | Signification |
---|---|
, point |
Délimiteur pour les noms qualifiés d’assembly. |
[] (crochets) |
En tant que paire de suffixes, indique un type tableau ; en tant que paire de délimiteurs, encadre les listes d’arguments génériques et les noms qualifiés d’assembly. |
& (esperluette) |
En guise de suffixe, indique qu’un type est un type référence. |
* sert |
En guise de suffixe, indique qu’un type est un type pointeur. |
+ Protect |
Délimiteur pour les types imbriqués. |
\ vers |
Caractère d’échappement. |
Les propriétés telles que AssemblyQualifiedName retournent des chaînes correctement placées dans une séquence d’échappement. Vous devez passer les chaînes correctement placées dans une séquence d’échappement à la GetType méthode. À son tour, la GetType méthode passe correctement les noms placés dans une séquence d’échappement à typeResolver
et aux méthodes de résolution de type par défaut. Si vous devez comparer un nom à un nom sans séquence d’échappement dans typeResolver
, vous devez supprimer les caractères d’échappement.
Retour aux Remarques d’utilisation.
Résolution de noms mixtes
Le tableau suivant récapitule les interactions entre assemblyResolver
, typeResolver
et la résolution de noms par défaut, pour toutes les combinaisons de nom de type et de nom d’assembly dans typeName
:
Contenu du nom de type | Méthode du programme de résolution d’assembly | Méthode du programme de résolution de type | Résultats |
---|---|---|---|
type, assembly | null | null | Équivalent à l’appel de la Type.GetType(String, Boolean, Boolean) surcharge de méthode. |
type, assembly | fournit | null | assemblyResolver retourne l’assembly ou retourne null s’il ne peut pas résoudre l’assembly. Si l’assembly est résolu, la Assembly.GetType(String, Boolean, Boolean) surcharge de méthode est utilisée pour charger le type à partir de l’assembly ; sinon, il n’y a aucune tentative de résolution du type. |
type, assembly | null | fournit | Équivalent à la conversion du nom de l’assembly en un AssemblyName objet et à l’appel de la Assembly.Load(AssemblyName) surcharge de méthode pour récupérer l’assembly. Si l’assembly est résolu, il est passé à typeResolver ; sinon, typeResolver n’est pas appelé et aucune autre tentative de résolution du type n’est effectuée. |
type, assembly | fournit | fournit | assemblyResolver retourne l’assembly ou retourne null s’il ne peut pas résoudre l’assembly. Si l’assembly est résolu, il est passé à typeResolver ; sinon, typeResolver n’est pas appelé et aucune autre tentative de résolution du type n’est effectuée. |
type | NULL, fourni | null | Équivalent à l’appel de la Type.GetType(String, Boolean, Boolean) surcharge de méthode. Étant donné que le nom de l’assembly n’est pas fourni, la recherche porte uniquement sur mscorlib.dll/System.Private.CoreLib.dll et l’assembly en cours d’exécution. Si assemblyResolver est fourni, il est ignoré. |
type | NULL, fourni | fournit | typeResolver est appelé, et null est passé pour l’assembly. typeResolver peut fournir un type à partir de n’importe quel assembly, y compris les assemblys qu’il charge à cet effet. Si assemblyResolver est fourni, il est ignoré. |
assembly | NULL, fourni | NULL, fourni | Une FileLoadException exception est levée, car le nom de l’assembly est analysé comme s’il s’agissait d’un nom de type qualifié d’assembly. Cela aboutit à un nom d’assembly non valide. |
Retour à : Remarques sur l’utilisation, résolution des assemblys, résolution des types.