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' */
乱用すると気持ちの悪いコードが書けそうです。(^^;