.Net框架程序設計-讀書筆記(第四章 類型基礎)

1. 類型基礎
1.1. 基類型System.Object
CLR要求所有的對象都要用new操作符來創建,new操作符所執行的工作:
 
1)       從託管堆中分配指定類型所需的內存空間;
2)       初始化對象的附加成員:類型方法表指針和SyncBlockIndex;
3)       傳入new操作符中指定的參數,調用類型的實例構造器;
 
在new完成上述操作後,將返回一個指向新創建對象的引用。CLR中沒有和new對應的delete操作符,分配的內存由垃圾回收器負責。
 
1.2. 類型轉換
CLR在運行時總能知道一個對象的類型,也可以通過調用GetType方法來得到對象的準確類型。GetType方法爲非虛方法,因此不可能利用它來篡改一個類型的信息。
 
CLR允許將對象轉換爲其原來的類型或者它的任何一個基類型。例如:C#不許要任何特殊的語法就可以將對象轉換爲任何一個基類型,轉換爲基類型被認爲是安全的隱式操作。CLR會檢查轉型操作以確保總是將對象轉型爲它的實際類型,或者它的任何基類型。
 
1)       IS操作符檢查對象是否和給定的類型兼容,並返回判斷結果。IS操作符不會拋出異常。如果對象引用爲NULL,那麼IS操作符總是返回false;
2)       AS操作符檢查引用對象是否和給定的類型兼容,如果兼容則返回一個同一對象的引用,否則返回NULL。AS操作符不會拋出異常;
 
If ( o is Employee )
    Employee e = (Employee)o;
 
上面的代碼,CLR實際上對對象的類型檢查了兩次。Is操作符首先檢查o所引用的對象是否和Employee兼容。如果兼容,if語句內在執行轉換時CLR又會檢查o是否爲一個指向Employee的引用。爲了提高性能C#提供了as操作符。
 
Employee e = o as Employee;
If ( e != null ) { … }
 
上面的代碼中只檢查了一次對象的類型,如果兼容as則返回一個指向同一對象的非空指針,否則返回null。檢查e是否爲null要比類型檢查的效率高。
 
1.3. 命名空間與程序集
命名空間允許我們對相關類型進行邏輯上的組織。C#的using指示符會指示編譯器試着在類型名上添加不同的前綴,直到找到一個匹配爲止。
 
當查找一個類型的定義時,編譯器必須被告知到哪些程序集中進行查找。編譯器將掃描它知道的所有程序集來查找類型的定義。C#編譯器默認情況下會自動在MSCorLib.dll程序集中進行查找。
 
C#還提供了另一種形式的using指示符允許我們爲一個類型或者命名空間創建另外的別名。例如:
 
Using WintellectWidget = Wintellect.Widget;

         C#using指示符僅支持命名空間,沒有提供任何指定程序集的方式。命名空間和程序集並非必然相關,多個屬於同一命名空間中的類型可能被實現在多個程序集中,一個程序集也可以包含位於不同命名空間中的類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章