49 votes

C# 4.0 Dynamic vs Expando... quelle est leur place ?

J'essaie d'apprendre toutes les nouvelles fonctionnalités de C# 4.0. Je n'arrive pas à comprendre les différences entre les types Dynamic et Expando. D'après ce que je vois, il semble que Dynamic soit utilisé pour accéder à des variables, etc. à partir de scripts python, etc. Expando semble être un outil très utile pour parler avec des objets COM/Office. Expando semble être un outil utile pour communiquer avec les objets COM/Office. Je peux me tromper et j'aimerais vraiment avoir des informations à ce sujet.

Merci d'avance !

91voto

Paul Sasik Points 37766

Expando est un dynamic auquel des membres peuvent être ajoutés (ou supprimés) au moment de l'exécution. dynamic est conçu pour permettre à .NET d'interagir avec les types lors de l'interfaçage avec des langages à typage dynamique tels que Python et JavaScript.

Donc, si vous avez besoin de gérer un type dynamique : utilisez dynamic et si vous devez gérer des données dynamiques telles que XML ou JSON : utilisez ExpandoObject

La déclaration d'un expando montre la relation entre la dynamique et l'expando :

dynamic expando = new ExpandoObject();

Et la possibilité d'ajouter une nouvelle propriété :

expando.SomeNewStringVal = "Hello World!";

Cette dernière ligne de code crée une toute nouvelle propriété de chaîne dans l'objet expando appelée SomeNewStringVal . Le type de chaîne est déduit de l'affectation.

Un expando est donc un type de données dynamique qui peut représenter des données changeant de façon dynamique. C'est tout en résumé. Voici un aperçu plus approfondi de la dynamique et de l'expansion. .

Exemple complet :

using System;
using System.Dynamic;

class Program
{
    static void Main(string[] args)
    {
        dynamic expando = new ExpandoObject();
        expando.SomeNewStringVal = "Hello Brave New Whirrled!";
        Console.WriteLine(expando.SomeNewStringVal);

        // more expando coolness/weirdness:
        var p = expando as IDictionary<String, object>;
        p["A"] = "New val 1";
        p["B"] = "New val 2";

        Console.WriteLine(expando.A);
        Console.WriteLine(expando.B);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X