La réflexion en C# fait référence à un mécanisme qui permet à un programme d'obtenir et de manipuler dynamiquement des informations de type au moment de l'exécution. Grâce à la réflexion, nous pouvons obtenir le type au moment de l'exécution, accéder aux membres du type (propriétés, méthodes, champs, etc.), créer des instances et appeler des méthodes, et même modifier dynamiquement les membres du type.
La réflexion est très utile dans de nombreux scénarios, notamment lors de l'écriture de code général ou de frameworks. Cela nous permet de charger et d'utiliser dynamiquement des types basés sur des informations sans connaître le type spécifique.
Reflection en C# est principalement pris en charge par certaines classes et interfaces sous l'espace de noms System.Reflection
. Parmi elles, la classe Assembly
est utilisée pour charger et accéder aux informations sur l'assembly, la classe Type
est utilisée pour obtenir et exploiter les informations de type, et la classe MethodInfo
La classe est utilisée pour obtenir et utiliser les informations sur la méthode d'opération, la classe PropertyInfo
est utilisée pour obtenir et exploiter les informations sur les attributs, etc. System.Reflection
命名空间下的一些类和接口来支持。其中,Assembly
类用于加载和访问程序集信息,Type
类用于获取和操作类型信息,MethodInfo
类用于获取和操作方法信息,PropertyInfo
类用于获取和操作属性信息等等。
下面通过一个具体的代码示例来演示如何使用反射。
using System; using System.Reflection; class MyClass { public int MyProperty { get; set; } public void MyMethod() { Console.WriteLine("Hello, reflection!"); } } class Program { static void Main(string[] args) { // 加载程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 获取类型 Type myClassType = assembly.GetType("MyNamespace.MyClass"); // 创建实例 object myClassInstance = Activator.CreateInstance(myClassType); // 获取属性 PropertyInfo myProperty = myClassType.GetProperty("MyProperty"); // 设置属性值 myProperty.SetValue(myClassInstance, 42); // 获取方法 MethodInfo myMethod = myClassType.GetMethod("MyMethod"); // 调用方法 myMethod.Invoke(myClassInstance, null); } }
上面的代码首先通过Assembly.GetExecutingAssembly()
方法获取当前程序集的信息,然后使用GetType
方法获取MyClass
的Type
对象。接下来,通过Activator.CreateInstance
方法创建了MyClass
的实例。
通过反射,我们获取了MyProperty
和MyMethod
的信息,并使用SetValue
方法设置了属性的值,使用Invoke
rrreee
Le code ci-dessus obtient d'abord les informations de l'assembly actuel via la méthodeAssembly.GetExecutingAssembly()
, puis utilise la méthode GetType
pour obtenir le MyClass
code>Typeobjet. Ensuite, une instance de MyClass
est créée via la méthode Activator.CreateInstance
. 🎜🎜Par réflexion, nous avons obtenu les informations de MyProperty
et MyMethod
, et utilisé la méthode SetValue
pour définir la valeur de la propriété, et utilisé Invoke
La méthode appelle la méthode. 🎜🎜Grâce à cet exemple simple, nous pouvons voir le pouvoir de la réflexion, qui nous permet de charger, d'accéder et de modifier dynamiquement les membres d'un type au moment de l'exécution, obtenant ainsi une conception de code plus flexible et polyvalente. Cependant, la réflexion peut entraîner une surcharge en termes de performances, elle doit donc être utilisée avec prudence dans des scénarios exigeant des performances élevées. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!