框架設計 CLR Via C 第四章

2022-02-23 08:53:02 字數 1208 閱讀 4866

4.1所有的型別都是system.object型別派生的

class employee  =class employee:system.object

employee e=new employee("constructorparaml");

new 關鍵字要做的事情

1、它計算型別及其所有基型別(最高到system.object,雖然它沒有定義自己的例項字段)中定義的所有例項字段需要的位元組數。堆上的每個物件都需要一些額外的成員----稱為「型別物件指標(type object pointer)」和「同步塊索引(sync block index)」,這些成員將由clr用來管理物件。這些額外成員的位元組數會加到物件大小上。

2、它從託管堆中分配制定型別所需的位元組數,從而分配物件的記憶體,分配的所有位元組都設為零(0).

3、它初始化物件的「型別物件指標」和「同步塊索引」成員。

4、呼叫型別的例項構造器,向其傳入在new呼叫中指定的任何實參(上例就是字串「constructorparaml")。大多數編譯器都在構造器中自動生成**來呼叫乙個基類的構造器。在呼叫每個型別的構造器時,構造器都負責初始化由這個型別定義的例項字段。這樣,最終會呼叫到system.object 的構造器,該構造器只是簡單地返回,不會做其他任何事情。

4.2 強制型別轉換

gettype方法獲取當前物件的型別;

不是從當前類派生出的物件對它進行強制轉換的時候丟擲system.invalidcastexception異常

如class employee

class program

}利用is和as操作符進行強制型別轉換

is:檢查乙個物件是否相容於指定的型別,並返回乙個boolean值;true or false;

is永遠不會丟擲異常,它有返回值。

example:

object o=new object();

boolean b1=(o is object);//b1 返回true

boolean b2=(o is employee);//b2 返回 false

as:返回對於同乙個物件的非null引用,如果不相容,則返回乙個null

emloyee e=o as employee;

if(e!=null)

as相當於強制轉換一樣,不會丟擲異常,相反當返回值是乙個null值的時候,你要呼叫該物件,則會產生以個null的system.nullreferenceexception異常。

《CLR via C 》第四章《型別基礎》

在coding中,任何型別都是繼承於system.object的,形如public class physicalgc basecommand其實完整的寫法應該是public class physicalgc basecommand system.object既然繼承了system.object,那就...

js 設計模式 第四章

繼承 why?多個類公用的功能,如果重複拷貝,一方面,工作量大,另一方面,如果公用功能需要修改,則需要修改所有類中的這個功能,重複工作量大。為了減少複製以及帶來的不利於修改的問題,我們需要繼承 how?三種方法 classical inheritance prototypal inheritance...

第四章 繼承

一 為什麼要繼承 在物件導向中我們將具有很多重複內容的類中的內容提取出來,寫成乙個單獨的類 其他類只需要繼承就能取得這些功能,同時可以在自己類中寫入獨特的自定義方法 二 繼承語法 inte ce circle nsobject 繼承是在介面中定義的 冒號後的類名是要整合的類,nsobject 是co...