C#3.0亮點 —— 關鍵字var和匿名型別

來源:互聯網
上載者:User

        var是初始化一個匿名型別對象的專用關鍵字, 如果結合var和匿名型別, 在C#3.0中初始化一個匿名型別的對象是十分有個性的, 這樣的初始化方法讓當時剛接觸C#的我一直摸不清頭腦, 例如下面這個例子:

var myFriend = new  {Name = "Tom", Sex = "male"};

        這樣就初始化了一個匿名對象, 當然關鍵字var的引入, 背後是強大的編譯器做支援, 沒有顯式的型別宣告在程式啟動並執行時候就無法給這個類型的執行個體分配大小合適的記憶體! 比如這個例子在編譯的時候, 編譯器將建立一個含有兩個string成員的新匿名型別(第一個string成員是Name, 第二個string成員是Sex).

使用關鍵字var聲明變數

        這個沒有多少好說的:

var i = 10; //與int i = 10 效果相同var s = "Tom"; //與string s = "Tom"效果相同//...

        但這樣寫就是錯的:

var i = 10;i = "Tom";

        因為在編譯的時候, 編譯器會進行"類型推演", 編譯器會識別出i是一個int型變數, 但下一行代碼圖謀將字串"Tom賦值給i, 顯然會編譯出錯. 其實Visual Studio已經很智能了, 不必等到編譯階段, 在IDE裡寫這兩行的時候就提示出錯了.

        因此學會了var, 很多人可能喜歡聲明任何變數時都使用var關鍵字, 但回頭看看滿篇都是var關鍵字, 過了幾個月回頭看看代碼不能很直接的看出這個變數時什麼類型, 造成了代碼的可維護性變差了. 在<Linq技術詳解>P28作者是這麼說的:

為了獲得可維護的代碼, 不要因為使用var關鍵字方便, 就隨意使用這個關鍵字. 盡量在需要的時候再使用, 比如在講一個匿名型別的對象賦值給一個變數的時候.

        很多時候變數類型的名字較長(如HttpWebRequest), 而且HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(XXX), 後面已經很明顯的進行強型別轉換了, 在這種情況下我用var聲明變數比較多

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.