4.1 所有類型都派生自System.Object
System.Object提供的方法:GetType(),ToString(),GetHashCode(),Equals(),MemberwiseClone (),Finalize()
所有對象都是用new操作符創建,創建過程:
1. 計算對象大小,包括“類型對象指針”和“同步塊索引”
2.從托管堆分配對象的內存
3.初始化對象的“類型對象指針”和“同步塊索引”
4.調用ctor,傳入相應參數——最終會調用到System.Object的ctor,該ctor是空操作
5.返回新對象的引用/指針
4.2 強制類型轉換
類型安全,CLR的最重要特性之一。
1.對象轉成其基類,不需要任何特殊語法,默認為安全隱式轉換
Object o = new Employee(); ——將new Employee轉為Object基類,可以看作:
Employee e = new Employee(); Object o = e;
2.對象轉成其子類,要顯示轉換 Employee e = (Employee)o;
但是,即使顯示轉換,也會在運行期錯誤
基於以上原則,有 類型安全性檢測: http://www.cnblogs.com/Jax/archive/2007/08/05/844159.html
is和as操作符
is:檢查一個對象是否兼容於指定的類型,並返回一個bool值——即使類型不對,僅返回false,不會 拋出異常;null對象則返回false
if (o is Employee) { Employee e = (Employee)o; }
上述代碼檢測兩次對象類型,一次在if中的is,另一次在顯示轉型時——會影響性能,使用as代替。
as:用來簡化上述代碼:永遠不會拋出異常,如果對象不能轉型,就返回null:
Employee e = o as Employee; if (e != null) { //執行操作 }
4.3 命名空間和程序集
CLR不知道namespace概念,using是C#的語法,CLR只認識類型的全稱
C#會自動在MSCorLib.dll中查找所有核心FCL類型,如Object,Int32,String
記住以下語法:using System = NameSpaceAnotherName;
4.4 運行時相互關系