CLR筆記 4 型別基礎

2022-01-31 15:02:23 字數 1133 閱讀 5855

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;

但是,即使顯示轉換,也會在執行期錯誤

基於以上原則,有 型別安全性檢測:

is和as操作符

is:檢查乙個物件是否相容於指定的型別,並返回乙個bool值——即使型別不對,僅返回false,不會丟擲異常;null物件則返回false

if(o 

isemployee)

上述**檢測兩次物件型別,一次在if中的is,另一次在顯示轉型時——會影響效能,使用as代替。

as:用來簡化上述**:永遠不會丟擲異常,如果物件不能轉型,就返回null:

employee e =o 

asemployee;

if(e 

!=null

)4.3 命名空間和程式集

clr不知道namespace概念,using是c#的語法,clr只認識型別的全稱

c#會自動在mscorlib.dll中查詢所有核心fcl型別,如object,int32,string

記住以下語法:using system = namespaceanothername;

4.4 執行時相互關係

CLR筆記 4 型別基礎

4.1 所有型別都派生自system.object system.object提供的方法 gettype tostring gethashcode equals memberwiseclone finalize 所有物件都是用new操作符建立,建立過程 1.計算物件大小,包括 型別物件指標 和 同步...

Chapter4 型別基礎

clr要求所有物件都用new操作符來建立 employee e new employee constructorparam1 new操作符所做的事情 1.計算型別以及所有基類中定義的例項欄位所需要的位元組數 2.在託管堆中分配指定型別要求的位元組數,分配物件的記憶體 3.它初始化物件的 型別物件指標...

CLR筆記 列舉型別

class program t item 獲取列舉的物件的字串 string names enum.getnames typeof color foreach var item in names t item 使用parse將符號轉化成color型別,下面兩種形式都可以 color c color ...