Maison > développement back-end > C++ > Comment puis-je ajouter des propriétés C# de manière dynamique au moment de l'exécution ?

Comment puis-je ajouter des propriétés C# de manière dynamique au moment de l'exécution ?

Patricia Arquette
Libérer: 2024-12-30 20:09:16
original
927 Les gens l'ont consulté

How Can I Add C# Properties Dynamically at Runtime?

Ajouter dynamiquement des propriétés C# au moment de l'exécution à l'aide d'ExpandoObject

L'ajout de propriétés dynamiques aux objets au moment de l'exécution est une exigence courante dans de nombreuses applications. Une approche courante pour y parvenir consiste à utiliser un dictionnaire ou une collection de paramètres. Cependant, pour les scénarios dans lesquels le nombre et les noms des propriétés sont inconnus au préalable, cette approche ne suffit pas.

Utilisation d'ExpandoObject

Le .NET Framework fournit une solution intégrée à ce problème : ExpandoObject. Cette classe vous permet de créer des objets dynamiques auxquels vous pouvez ajouter et supprimer des propriétés au moment de l'exécution.

// Create a dynamic object
dynamic dynObject = new ExpandoObject();

// Add dynamic properties
dynObject.SomeDynamicProperty = "Hello!";

// Execute dynamic actions
dynObject.SomeDynamicAction = (msg) =>
{
    Console.WriteLine(msg);
};

dynObject.SomeDynamicAction(dynObject.SomeDynamicProperty);
Copier après la connexion

Objet dynamique personnalisé

Pour des scénarios plus compliqués, vous souhaiterez peut-être créer votre propre dynamique objet qui implémente la classe DynamicObject. Cela vous donne plus de contrôle sur la façon dont les demandes de membres dynamiques sont traitées.

public sealed class MyDynObject : DynamicObject
{
    // Member dictionary
    private readonly Dictionary<string, object> _properties;

    public MyDynObject(Dictionary<string, object> properties)
    {
        _properties = properties;
    }

    // Get dynamic member names
    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }

    // Try to get a dynamic member
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            result = _properties[binder.Name];
            return true;
        }
        else
        {
            result = null;
            return false;
        }
    }

    // Try to set a dynamic member
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        if (_properties.ContainsKey(binder.Name))
        {
            _properties[binder.Name] = value;
            return true;
        }
        else
        {
            return false;
        }
    }
}
Copier après la connexion

En utilisant cette approche, vous pouvez créer des objets dynamiques avec toutes les propriétés souhaitées :

var dyn = GetDynamicObject(new Dictionary<string, object>()
{
    { "prop1", 12 }
});

Console.WriteLine(dyn.prop1);
dyn.prop1 = 150;
Copier après la connexion

Attention : Lorsque vous utilisez des objets dynamiques, sachez que le compilateur ne pourra pas vérifier vos appels dynamiques et que vous pourriez rencontrer des erreurs d'exécution ou un manque d'intellisense soutien.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal