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 運行時相互關係