IDynamicObject - C# 4.0の新機能

さっきの続き

まだよくわからんけど、IDynamicObjectというインターフェースを実装すると動的型付けのオブジェクトを作れるみたい。

しかもその情報(メソッドとかプロパティとか)をどのように持つかは実装クラスに委ねられる。

で、その基本実装を提供するクラスとしてDynamicObjectという抽象基本クラスがあって、これを使うと簡単に動的型付けのクラスを定義できる。

デモでやってたコードが以下(画像が荒かったので一部違うかもしれん)

using System;
using System.Linq;
using System.Dynamic;
using System.Scripting.Actions;

public class Bag : DynamicObject {
    Dictionary<string, object> items = new Dictionary<string, object>();
    
    public override object GetMember(GetMemberAction action) {
        return items[action.Name];
    }
    
    public override void SetMember(SetMemberAction action, object value) {
        items[action.Name] = value;
    }
}

class Program {
    static void Main() {
        dynamic x = new Bag();
        x.ID = 12345;
        x.Name = "Lawn Money";
        x.Category = "Gardening";
        x.Price = 795.50m;
    }
}

すげー!!!

まるでPythonとかJavaScriptのオブジェクトみたい。内部的にはディクショナリだけど、外から見たらメンバのように見える。

プロパティやメソッドをどのように持つかを開発者の手に委ねられるということですね。

これは熱い!!