匿名类型的变量必须的声名的时候初始化,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 { } }