這個例子是一個更新過的版本 。靜態函數pqr不會傳遞這個指針到棧上,但是,非靜態函數abc會把這個指針或引用傳遞到它的變量存儲 在內存中的位置。因此,在調用函
我們只創建了一個對象,它是類bb的一個實例。有3個構造函數會被調用,而不是2個構造函數 (一個是基類的,一個是派生類的)。l 在IL中,首先,會調用沒有參數的
在C#中,一個函數的可訪問 性不能大於它所在類的可訪問性。函數vijay是公有的,然而它所在的類卻是私有的。因此,這個類對包 含在它內部的函數具有更多的約束。
這裡,變量i和j沒有被初始化。因此,這些字段沒 有在類yyy的靜態函數中被初始化。在類yyy的任何代碼被調用之前,這些變量會分派到它們的默認值,它 們依賴於它
像&&這樣的操作符 被稱為短路運算符,因為它們只有當第一個條件為True時才會執行第2個條件。我們重復了和先前一樣的 IL代碼,但是現在條件是
^符號被稱為XOR操作符。 XOR就像一個OR語句,但是有一點不同:OR只有當它的一個操作數為TRUE(其它的操作數為FALSE)時才會 返回TRUE。即使這
位於return語句之後的代碼是不會被執行的。在下面給出的第1個程序中,你將發現在C#中有一個 WriteLine函數調用,但是在我們的IL代碼中卻看不到。這
果在源代碼中不存在構造函數,那麼就會生成一個默認的無參構造函數。如果存在構 造函數,那麼這個無參構造函數就會從代碼中被排除。基類的無參構造函數總是會被調用,並
在C#中,一個命名空間可以出現在另一個命名空間中,但是C#編譯器更喜歡只使用一個 單獨的命名空間,從而IL輸出只顯示了一個命名空間。IL中的.namespac
我們現在要解釋IL是如何實現傳遞引用的。與C#不同,在IL中 可以很方便的使用指針。IL有3種類型的指針。當函數abc被調用時,變量i會被作為一個引用參數 傳
下面關注的是2個字符串的連接。C#編譯器通過將它們轉換 為一個字符串來實現。這取決於編譯器優化常量的風格。存儲在局部變量中的值隨後被放置在棧上,從而 在運行期
從而,String類和它的函 數是在C#編譯器中創建的。因此我們能夠斷定,C#可以理解並處理字符串運算。a.csclass zzz{public static
無論我們何時轉換一個變量,例如把一個數字值轉換為一個字符 值,在內部,程序僅調用了帶有轉換數據類型的函數。轉換不能修改原始的變量。實際發生的是,在 Write
當你看到上面的代碼時,你將理解為什麼全世界的程序員都討厭寫注釋。C#中的所有注 釋在生成的IL中都會被刪除。單引號不會被復制到IL代碼中。編譯器對注釋是缺乏“
接下來的一系列程序與預處理指令有關,這與C#編譯器是不同的 。只有預處理指令能夠理解它們。在上面的.cs程序中,#define指令創建了一個名為 vijay的
繼承的概念在所有支持繼承的程序語言中都是相同的。單 詞extends起源於IL和Java而不是C#。當我們編寫a.abc()時,編譯器決定在abc函數中的調用
在上面程序的上下文中,我們要向C#新手多做一點解釋。我們能夠使基類的一個對象和派生類xxx的一個對象相等。我們調用了方法a.abc()。隨之出現的 問題是,函
果類xxx的基構造函數沒有被調用,那麼在輸出窗體中 就不會有任何顯示。通常,我們不會在IL程序中包括默認的無參構造函數。如果沒有關鍵字new或 overrid