《.NET架構程式設計》第五章 基元類型、參考型別與實值型別

來源:互聯網
上載者:User

一、基元類型(primitive type)編譯器直接支援的資料類型。

參考型別(reference type)總是從託管堆上進行分配。記憶體的回收通過垃圾收集器。

實值型別(value type)通常分配線上程的堆棧中(當然,也可以被嵌入到一個參考型別的對象中)。實值型別執行個體不受垃圾收集器的控制。

 

二、盡量使用FCL類型名:在開發中,盡量使用FCL類型名,也就是System.String,System.Int32等等。而不要使用string,int等基元類型名。因為FCL類型名具體的可以看出類型的一些限制,如Int32就是表示32位的有符號數,比較直觀;另外,一些基元類型和對應的FCL類型名稱不相同,容易引起混淆,如基元類型float對應的FCL類型名是System.Single;最後,同一個基元類型,可能在不同的程式設計語言中對應不同的FCL類型,這就會帶來了一系列的潛在的問題。

三、類型轉換:可以使用System.Convert類型的靜態方法在不同類型的對象之間進行轉型。Convert類型中的靜態方法ChangeType可以將一個類型轉換為另外一個任意的類型,前提是被轉換類型實現了Iconvertible介面,特別是其中的ToType方法。(是否可以利用這個技術來實現點什麼新的功能??)

四、溢出的異常的控制:許多基元類型的算術運算都會導致結果溢出,預設情況下,這種溢出是不會拋出異常的,可以使用/checked+命令列開關告訴編譯器使用帶溢出的IL指令來產生代碼。(如何在開發環境中開啟這個開關??)另一種方法是在代碼中使用checked和unchecked操作符來開關一段代碼的溢出檢查。我個人覺得沒有必要使用checked和unchecked操作符來做這種精細的控制,雖然直接開啟編譯器的溢出檢測開發會降低一些應用程式的效能,但是這種影響可以不必考慮。

五、參考型別和實值型別的區別:任何”類”都是參考型別,任何”結構”和”枚舉”都是實值型別。另外,所有的實值型別都必須繼承自System.ValueType類型。CLR不允許一個實值型別被用作基底類型。

六、實值型別的裝箱與拆箱:當需要盡量提高一段程式的執行效能時,可以對這段程式進行分析,盡量減少其中的裝箱和拆箱的操作。而之所以很多方法都提供了重載的版本,目的之一就是減少一些常用實值型別的裝箱操作。

聯繫我們

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