C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(10) - 靜態與實例方法調用、參數傳遞順序與建構函數鏈
靜態 vs 實例方法調用 靜態方法:不傳遞 this,直接 call。 實例方法:先 ldloc.0 載入 this 參考,再 call。 參數傳遞順序
C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(11) - 私有建構函數、預設值與靜態建構函數
私有建構函數與存取檢查 類別 aa 私有建構函數,外部 new aa() 會拋 MethodAccessException。IL 不主動檢查存取性,由 CLR
C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(5) - 類型轉換 castclass、存取修飾符約束與建構函數
castclass 指令實現類型轉換 C# (xxx)a 編譯為 castclass xxx。若轉換失敗拋 InvalidCastException。需確保物件
C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(12) - 三元操作符 ?: 與 & 邏輯與的 IL 實現
三元操作符 ?: 的分支結構 = 20 ? hi : bye 編譯為:條件判斷 bge.s 跳至真分支載入 hi,假則繼續載入 bye,最後統一存儲並輸出。IL
C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(14) - 短路邏輯 &&、|| 與 XOR 範例
短路邏輯 && 的分支實現 && 編譯為:第一條件假則直接跳過第二條件(跳至 ret),真才評估第二條件。使用 blt.s (clt+brtrue) 和 ble
C# 到 IL 深度解析:第4章 關鍵字與操作符 (下)(15) - XOR、邏輯非與 != 的 IL 實現
XOR (^) 操作符 IL 直接提供 xor 指令。真值表:僅當兩運算元不同為 true。 邏輯非 (!) 的 ceq 實現 !x 編譯為:ldloc.0
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(1) - return 後代碼消除與建構函數命名
return 後代碼的編譯期消除 // C# 代碼 return; Console.WriteLine(hi); // 不會編譯進 IL IL 僅含 br.
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(2) - 建構函數與命名空間巢狀
預設建構函數與基類鏈 無建構函數時編譯器產生預設無參建構子,並自動呼叫基類 .ctor()。 若有自訂建構函數,預設建構子不產生。 基類建構子總是最先被調用(
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(3) - 命名空間合併與傳址參數實例
命名空間在 IL 中的合併 C# 允許同名命名空間分散在多處,編譯器合併為單一 IL .namespace 區塊。巢狀命名空間 vijay.mukhi 在 IL
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(4) - 傳址參數 ref/out 的 IL 實現與指針類型
ref/out 在 IL 中的統一表現 IL 使用 & 後綴標記傳址參數(如 int32&)。ldloca.s 將區域變數位址壓入堆疊,stin
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(5) - 字串常量折疊與 Concat 呼叫細節
常量字串連接的編譯期折疊 // C# 代碼 string s = hi + bye; Console.WriteLine(s); IL 直接 ldstr h
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(6) - 字串連接與比較的編譯器實現
字串連接:String.Concat // C# 代碼 string s = hi; string t = s + bye; Console.WriteLine
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(7) - 字串連接、比較與 char 類型轉換
字串連接與比較的編譯器優化 + 連接字串 → 呼叫 String.Concat 靜態方法。 == 比較字串 → 呼叫 String.Equals 靜態方法。
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(9) - 註釋移除、字串處理與預處理指令
註釋在 IL 中完全移除 C# 所有註釋(單行、多行、XML 文件註釋)編譯時全部捨棄,不出現在 IL 中。 字串處理範例 // C# 代碼 Console.
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(10) - 預處理指令、字串處理與繼承基礎
預處理指令在編譯期移除 #define、#if、#else、#endif 等預處理指令僅影響編譯器,不產生 IL。編譯器根據條件直接保留或捨棄代碼塊。 範例:
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(11) - 繼承基礎與編譯器決策
extends 關鍵字與繼承 IL 使用 extends 建立繼承關係(源自 Java/IL,非 C# 專有)。編譯器根據靜態類型決定方法呼叫的前綴類別(如 y
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(12) - 繼承與虛擬方法調用的編譯期與運行期繫結
繼承關係與方法調用繫結 C# 繼承使用 :,IL 使用 extends。編譯器根據靜態類型決定呼叫前綴(yyy::abc 或 xxx::abc),但 callv
C# 到 IL 深度解析:第4章 關鍵字與操作符 (上)(13) - override、new 與虛擬方法分派
override 與 new 的 IL 體現 override:方法標記為 virtual,移除 newslot,實現真正覆寫。 new:方法不標記 virt