Introduction au mécanisme de réflexion en C#

WBOY
Libérer: 2024-02-20 11:09:05
original
920 Les gens l'ont consulté

Introduction au mécanisme de réflexion en C#

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);
    }
}
Copier après la connexion

上面的代码首先通过Assembly.GetExecutingAssembly()方法获取当前程序集的信息,然后使用GetType方法获取MyClassType对象。接下来,通过Activator.CreateInstance方法创建了MyClass的实例。

通过反射,我们获取了MyPropertyMyMethod的信息,并使用SetValue方法设置了属性的值,使用Invoke

Ce qui suit utilise un exemple de code spécifique pour montrer comment utiliser la réflexion.

rrreee

Le code ci-dessus obtient d'abord les informations de l'assembly actuel via la méthode Assembly.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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal