Dynamic object provides a base class for specifying dynamic behavior at runtime.
public class DynamicObjectInvoker:DynamicObject { public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { Console.WriteLine(binder.Name + " method was called"); result = null; return true; } }
static void DynamicInvokeMemberDemo() { dynamic doi = new DynamicObjectInvoker(); doi.MakeMoney(); doi.MakeBigMoney(); }
static void ExpandObjectDemo() { dynamic x = new ExpandoObject(); x.FavoriteColor = ConsoleColor.Green; x.FavoriteNumber = 7; Console.WriteLine(x.FavoriteColor); Console.WriteLine(x.FavoriteNumber); var dict = (IDictionary<string, object>)x; Console.WriteLine(dict["FavoriteColor"]); Console.WriteLine(dict["FavoriteNumber"]); Console.WriteLine(dict.Count); }
C# can also interoperate with Dynamic language such as IronPython.The DLR can parse lexical and sematic statement.
static void Main(string[] args) { int result = (int)Calculate("2*3"); Console.WriteLine(result); Console.ReadLine(); } static object Calculate(string expression) { ScriptEngine engine = Python.CreateEngine(); return engine.Execute(expression); }