Contenu du cours
C# Avancé Avec .NET
C# Avancé Avec .NET
Réflexion de Base
Dans ce chapitre, nous couvrirons les fonctionnalités de base et importantes de la réflexion qui pourraient être utiles dans le développement Web et UI avec C#.
Obtenir les Types d'Objets à l'Exécution
La première fonctionnalité est celle que nous avons déjà explorée dans le dernier chapitre. C'est la méthode GetType
. La méthode GetType
nous donne le type de n'importe quel objet. Cela peut être utile lorsque nous voulons prendre des décisions basées sur les types d'objets :
index
static float ExampleMethod(object value) { if(value.GetType() == typeof(int)) { return (float) value * 2; } return (float) value; }
Il est important de noter que nous ne pouvons pas utiliser la fonction typeof
avec des objets, mais plutôt avec des noms de classes :
index
int value = 10; typeof(value) // Incorrect typeof(int) // Correct, returns "System.Int32" typeof(long) // Correct, returns "System.Int64"
Il existe une classe appelée Type
qui est définie dans l'espace de noms System.Reflection
. Nous pouvons créer des variables de type Type
et stocker le résultat de GetType
ou typeof
dans ces variables :
index
Type exampleVar1 = value.GetType(); Type exampleVar2 = typeof(int);
La fonction typeof
n'est pas exactement la même que la méthode GetType()
. Les deux renvoient une instance de Type
, cependant, typeof
renvoie l'instance de Type
d'une classe au temps de compilation, tandis que la méthode GetType()
renvoie l'instance de Type
d'un objet au temps d'exécution. Cela est dû au fait que lors de l'utilisation de typeof(int)
, le programme sait déjà essentiellement que le type de données est int
, il doit simplement le traduire en une instance de Type
. Alors que dans le cas de value.GetType()
, le programme doit déterminer le type de l'objet value
.
Obtenir une liste de toutes les propriétés d'un type
Les objets Type
ont une méthode appelée GetProperties
qui peut récupérer la liste de toutes les propriétés publiques dans le type cible.
Les références de propriété peuvent être stockées dans un tableau de type PropertyInfo
. La classe PropertyInfo
est définie dans l'espace de noms System.Reflection
et possède une variété d'attributs et de méthodes utiles.
Une référence à une propriété spécifique unique peut également être récupérée, en utilisant la méthode GetProperty
.
La méthode GetProperty
renverra la propriété qui correspond au propertyName
. Sinon, elle renvoie null
.
Obtenir une Liste de toutes les Méthodes d'un Type
Nous pouvons obtenir une liste de toutes les méthodes d'un type spécifique en appelant la méthode GetMethods
de son instance Type
.
Les références de méthode peuvent être stockées dans un tableau de type MethodInfo
qui est également défini dans l'espace de noms System.Reflection
.
index
MethodInfo[] methods = exampleType.GetMethods();
Nous pouvons également récupérer une seule méthode d'une classe en utilisant GetMethod
:
index
MethodInfo method = exampleType.GetMethod("methodName");
La méthode GetMethod
renvoie la première méthode qui correspond au nom methodName
. S'il n'y a pas de telle méthode, elle renvoie null
.
La classe MethodInfo
a une méthode appelée Invoke
qui prend les arguments suivants :
index
Invoke(objectReference, arguments);
Ici, objectReference doit être un objet du type dont provient la méthode. Les arguments
peuvent être représentés soit par null
en cas d'absence d'arguments, soit par un tableau de type object
. Par exemple :
index
method.Invoke(exampleObject, null); method.Invoke(exampleObject, new object[] { "first", "second", 1, 2, 3.4f, 5.67, true });
1. Que fait la méthode GetType en C# ?
2. Comment pouvez-vous obtenir une liste de toutes les propriétés d'un type en utilisant la réflexion ?
3. Quelle est la méthode correcte pour invoquer une méthode qui a deux arguments de type string
et int
respectivement ?
Merci pour vos commentaires !