Maison > développement back-end > C++ > Comment ajouter dynamiquement des propriétés C# au moment de l'exécution sans utiliser de collections ?

Comment ajouter dynamiquement des propriétés C# au moment de l'exécution sans utiliser de collections ?

Barbara Streisand
Libérer: 2025-01-02 21:12:40
original
398 Les gens l'ont consulté

How to Dynamically Add C# Properties at Runtime Without Using Collections?

Ajouter dynamiquement des propriétés C# au moment de l'exécution sans utiliser de collections

Envisagez un scénario dans lequel vous devez créer un objet dynamique avec des propriétés qui peuvent être ajoutées dynamiquement au moment de l'exécution. Au lieu d'utiliser un dictionnaire ou une collection de paramètres, vous pouvez exploiter la classe ExpandoObject.

ExpandoObject

ExpandoObject vous permet d'ajouter et de supprimer des membres de ses instances au moment de l'exécution, permettant des capacités de liaison dynamique. Il fournit un moyen pratique de manipuler les propriétés de manière dynamique, comme le montre l'exemple suivant :

dynamic dynObject = new ExpandoObject();
dynObject.SomeDynamicProperty = "Hello!";
Copier après la connexion

Objet dynamique personnalisé

En vous basant sur l'approche ExpandoObject, vous pouvez créer un objet dynamique personnalisé qui gère la récupération et la définition des propriétés dynamiques. Le code suivant illustre ce concept :

public static dynamic GetDynamicObject(Dictionary<string, object> properties)
{
    return new MyDynObject(properties);
}

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

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

    public override IEnumerable<string> GetDynamicMemberNames()
    {
        return _properties.Keys;
    }

    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;
        }
    }

    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 implémentant l'interface DynamicObject, vous obtenez un contrôle total sur le mécanisme d'accès aux membres dynamiques. Cela vous permet d'implémenter des règles et des comportements personnalisés pour votre objet dynamique.

Utilisation

Une fois votre objet dynamique personnalisé en place, vous pouvez ajouter des propriétés et les récupérer au moment de l'exécution. :

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

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

Remarque :

Les objets dynamiques sont puissants mais doivent être utilisé avec prudence. Le compilateur ne peut pas vérifier les appels dynamiques et vous risquez de rencontrer des erreurs d'exécution si vous ne faites pas attention. Il est crucial de comprendre les mécanismes sous-jacents et les problèmes potentiels avant de les utiliser dans le code de production.

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