Maison > développement back-end > C++ > Comment ajouter dynamiquement des propriétés C# au moment de l'exécution à l'aide d'ExpoObject et DynamicObject ?

Comment ajouter dynamiquement des propriétés C# au moment de l'exécution à l'aide d'ExpoObject et DynamicObject ?

Susan Sarandon
Libérer: 2024-12-30 15:31:10
original
489 Les gens l'ont consulté

How to Dynamically Add C# Properties at Runtime Using ExpandoObject and DynamicObject?

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

Introduction

L'ajout dynamique de propriétés au moment de l'exécution est une exigence courante dans divers scénarios de programmation. Bien que des approches telles que l'utilisation de dictionnaires ou de collections puissent suffire dans certaines situations, elles peuvent ne pas convenir à tous les cas d'utilisation. Explorons une solution alternative tirant parti d'ExpoObject.

Utilisation d'ExpoObject

ExpoObject est une classe intégrée dans .NET qui vous permet d'ajouter et de supprimer des membres de manière dynamique au moment de l'exécution, permettant ainsi l'affectation et la récupération de valeurs via une syntaxe de points standard. Cette approche constitue un moyen pratique de créer des objets dynamiques avec des propriétés déterminées à la volée.

Pour utiliser ExpandoObject, vous pouvez simplement créer une nouvelle instance et attribuer des propriétés selon vos besoins :

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

Personnalisation du comportement des objets dynamiques

Si vous avez des exigences spécifiques quant au comportement de votre objet dynamique, vous pouvez étendre la classe DynamicObject et implémenter une logique personnalisée pour gérer l'accès et la modification des membres. Voici un exemple :

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) {
        return _properties.TryGetValue(binder.Name, out result); }
    public override bool TrySetMember(SetMemberBinder binder, object value) {
        _properties[binder.Name] = value; return true; }
}
Copier après la connexion

Avec cet objet dynamique personnalisé, vous pouvez créer des objets dynamiques avec des propriétés et les modifier dynamiquement 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

Considérations

Alors l'utilisation de DynamicObject offre flexibilité et facilité d'utilisation, elle introduit également des possibilités inconvénients :

  • Vérification de l'exécution : Le compilateur ne peut pas vérifier les appels dynamiques, il existe donc un risque d'erreurs d'exécution et de capacités de débogage réduites.
  • Support Intellisense : Les objets dynamiques ne fournissent pas de prise en charge Intellisense dans les environnements de développement, ce qui rend plus difficile la navigation et l'exploration des propriétés disponibles sur runtime.

Par conséquent, il est essentiel d'équilibrer les avantages de la manipulation dynamique d'objets avec ces considérations lors du choix de l'approche la plus adaptée à vos besoins de développement.

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