標籤:class blog code http com get
dynamic類型是C#4.0中引入的新類型,它允許其操作掠過編譯器類型檢查,而在運行時處理。dynami類型在絕大多數情況下和object類型相似,不同之處在於編譯器對於包含了dynamic的運算式不做進一步解析和類型檢查。編譯器將這些資訊收集到一起,用於在運行時評鑑操作。也就是具體類型在運行時程式才知道。實際上,dynamic類型的變數被編譯成object類型,因此,dynamic類型實際上只存在於編譯期,而運行時並不存在。
先來看一段有趣的代碼:
static void Main(string[] args) { dynamic dyn = 1; object obj = 1; dyn += 1; //編譯期間不檢查,到運行時確定為int類型 //obj += 1; //此段代碼編譯不通過,提示 運算度+=無法應用於"object"與"int"類型的運算元。 Console.WriteLine(dyn.GetType()); //輸出Systen.Int32 Console.WriteLine(dyn.GetType()); //輸出System.Int32 Console.ReadKey(); }
使用dynamic類型要注意的問題:
由於dynamic類型的變數在設計時是未知的,因此無法看到Visual Studio對dynamic類型變數的成員進行自動提示,因為編譯器也不知道。
由於dynamic類型變數的具體類型要在運行時才能確定,因此你對該變數的成員調用必須是正確的,如果調用了變數沒有的屬性或方法,將會產生異常。
class Program { static void Main(string[] args) { Person p = new Person(); p.Name = "張三"; Write(p); Console.WriteLine(p.Name); Console.ReadKey(); } static void Write(dynamic d) { Console.WriteLine(d.Name); d.Name = "神靈武士"; } } public class Person { public string Name { get; set;} }