匿名类型和动态类型

匿名类型的变量必须的声名的时候初始化,intellisense会直接显示其成员。

动态类型可以先声名,后初始化,intellisense不会显示其成员。

动态类型声名的引用可以指向匿名类型对象,匿名类型可以包含动态类型成员,这些都无碍。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static bool flag = false;
        static dynamic GetValue()
        {
            flag = !flag;
            if (flag)
                return new MyClass1();
            else
                return new MyClass2();
        }

        static void Main(string[] args)
        {
            try
            {
                dynamic myObject1 = GetValue();
                dynamic myObject2 = GetValue();

                myObject1.ShowMessage();
                //myObject2.ShowMessage();

                var anonymousObject1 = new { name = "Jean", age = 24 };
                dynamic dynamicObject3 = anonymousObject1;
                Console.WriteLine(dynamicObject3.name);

                var anonymousObject2 = new { name = "Diablo", o = GetValue() };
                anonymousObject2.o.ShowMessage();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.GetType().ToString());
            }
            Console.Read();
        }
    }

    class MyClass1
    {
        public void ShowMessage()
        {
            Console.WriteLine("Invoke success!");
        }
    }

    class MyClass2
    {
        
    }


}
原文地址:https://www.cnblogs.com/JingG/p/2888169.html