ExpandoObject

.NET4.0で追加されたExpandoObjectクラスを使うと実行時にメンバーの追加、削除が出来ます。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;

namespace DynamicObjectSample
{
    class Program
    {
        static void Main(string args)
        {
            dynamic foo = new ExpandoObject();

            // プロパティの追加
            foo.Name = "mei";

            // メソッドの追加
            foo.Hi = new Action(() => Console.WriteLine("Hi, {0}!", foo.Name));

            // メソッドの追加(引数あり)
            foo.Say = new Action<dynamic>([](t) => Console.WriteLine(t + foo.Name));

            // 呼び出し
            foo.Hi();
            foo.Say("akira");

            // メンバを削除するにはIDictionary<string, object>にキャストする必要がある
            ((IDictionary<string, object>)foo).Remove("Say");

            try
            {
                foo.Say("akira");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

/* 結果
Hi, mei!
akiramei
'System.Dynamic.ExpandoObject' does not contain a definition for 'Say'
 */

乱用すると気持ちの悪いコードが書けそうです。(^^;