C# dynamic類型

來源:互聯網
上載者:User

標籤: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;}     }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.