今天在看c#參考時明白了 什麼是c#的執行時型別與編譯時型別,記錄下來,以備查閱:
相信很多剛學c#的人都對這兩個概念感到迷惑,其時並不難(以前太重於技術可用性,比如:asp.net中的datadrid怎麼用等問題,沒大研究過這方面),希望能對c#初學者有所幫助。請看如下**:
class
aclass
bclass
public
static
void
main()}
以上**中的物件a沒什麼好說的,執行時與編譯時型別均為a
而物件b的執行時型別為a,編譯時型別為b
說說原因,因為物件a,b本身都是引用型別,在編譯時物件b的型別由我們寫的b b來確定,而在程式執行後發現b引用的內容實際是a所引用的內容,而物件a的型別是確定為a的(因已例項化了),所以b 的執行時型別就和a的型別相同了
如下**所示:
class mm
public virtual void g()
//宣告了乙個虛方法 }
class nn : mm
public override void g()
//重寫了方法g }
class test }
以上**中的物件b沒什麼好說的,執行時與編譯時型別均為nn
而物件c的執行時型別為nn,編譯時型別為mm
說說原因,因為物件b,c本身都是引用型別,在編譯時物件c的型別由我們寫的mm c來確定,而在程式執行後發現c引用的內容實際是b所引用的內容,而物件b的型別是確定為nn的(因已例項化了),所以c的執行時型別就和b的型別相同了。
對於非虛方法來說,呼叫哪個方法取決於該例項編譯時的型別。
但對於虛方法來說,呼叫哪個方法取決於該例項執行時的型別。
iOS編譯時型別與執行時型別
首先我們來寫乙個物件 nsstring obj nsdata alloc init 一般來說我們寫完上面的 xcode會為我們提示乙個warning incompatible pointer types intializing nsstring with an expression of type ...
當編譯時型別與執行時型別不同時
class base public void display class derived extends base public void display public class test 以上 輸出結果為0 行的注釋表示執行順序 1 系統先為derived物件分配記憶體空間,有兩塊記憶體空間分別...
C 中的執行時型別檢查
c 中的執行時型別檢查 簡介經常有人問到 我怎樣才能在執行時確定或檢查c 中物件的型別呢?下面通過乙個簡單問題來作一演示。以下程式會在第一次呼叫cfoo animalsays 時顯示 bark 而第二次呼叫時顯示 miaou class animal class dog public animal ...