一、基元類型(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不允許一個實值型別被用作基底類型。
六、實值型別的裝箱與拆箱:當需要盡量提高一段程式的執行效能時,可以對這段程式進行分析,盡量減少其中的裝箱和拆箱的操作。而之所以很多方法都提供了重載的版本,目的之一就是減少一些常用實值型別的裝箱操作。