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);
        }
    }
}

  

你可能感兴趣的:(dynamic)