C#新特性, dynamic, ExpandObject
http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx
using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Text; namespace TestCSharp { class ExampleClass { public ExampleClass() { } public ExampleClass(int v) { } public void exampleMethod1(int i) { Console.WriteLine(i); } public void exampleMethod2(string str) { Console.WriteLine(str); } } class Program { static void Main(string[] args) { ExampleClass ec = new ExampleClass(); // The following call to exampleMethod1 causes a compiler error // if exampleMethod1 has only one parameter. Uncomment the line // to see the error. //ec.exampleMethod1(10, 4); dynamic dynamic_ec = new ExampleClass(); // The following line is not identified as an error by the // compiler, but it causes a run-time exception. dynamic_ec.exampleMethod1(10); // The following calls also do not cause compiler errors, whether // appropriate methods exist or not. dynamic_ec.exampleMethod2("some argument"); //dynamic_ec.nonexistentMethod(); dynamic i = 10; ++i; Console.WriteLine(i+i); dynamic sampleObject = new ExpandoObject(); // Create a new event and initialize it with null. sampleObject.sampleEvent = null; // Add an event handler. sampleObject.sampleEvent += new EventHandler(SampleHandler); // Raise an event for testing purposes. sampleObject.sampleEvent(sampleObject, new EventArgs()); sampleObject.name = "ww"; sampleObject.age = 23; Console.WriteLine("name={0},age={1}", sampleObject.name, sampleObject.age); ToStr(sampleObject); Console.ReadKey(); } // Event handler. static void SampleHandler(object sender, EventArgs e) { Console.WriteLine("SampleHandler for {0} event", sender); } static void ToStr(dynamic sampleObject) { Console.WriteLine("ToStr:name={0},age={1}", sampleObject.name, sampleObject.age); } } }