static void Main(string[] args) { dynamic person = new ExpandoObject(); person.Name = "Test"; person.Age = 30; person.Address = "TestAddress"; // print the members PrintMembers(person); // remove a member (person as IDictionary<string, object>).Remove("Address"); Console.WriteLine(); PrintMembers(person); // cast expando object to person wil throw exception //Person realPerson = person; //Console.WriteLine("I'm the real person"); //Console.WriteLine(string.Format("{0} : {1}", "Name", realPerson.Name)); dynamic person2 = new { Name = "Test1", Age = 100, Address = "Somewhere" }; Console.WriteLine(); PrintMembers(person2); // test method person.Talk = (Action)(() => Console.WriteLine("I can talk")); person.Talk(); // test function person.CalculateNumber = (Func<int, int, int>)((fist, second) => fist + second); Console.WriteLine(string.Format("I can calculate numbers : {0}", person.CalculateNumber(10, 10))); Console.ReadLine(); }