SharpLab
用途
透過 SharpLab 可以瞭解 C#語法糖(Syntactic sugar)與 IL(Intermediate Language),當然也可以透過一些工具去反編譯出來,但身為工程師就是懶,能少做一些事情就少做!
如何使用
- 選擇程式語言 (C#, VB, F#)
- 輸出的結果
- Build 結果 (Debug, Release)
語法糖
語法糖(Syntactic sugar): 是由英國”彼得·蘭丁”發明的一個術語,方便程式設計師使用,此語法對語言的功能並沒有影響。
例如下面寫法用語法糖寫出來最後跟一般寫法相同:
// 語法糖
public string MyName { get; set; }
用了語法糖的程式碼是不是簡單許多,不用在寫一長串程式碼
// 一般寫GET/SET寫法
private string _myName;
public string MyName
{
get { return _myName; }
set { _myName = value; }
}
中間語言
IL(Intermediate Language): 中文就是”中間語言”。CIL 類似一個物件導向的組合語言,並且它是完全基於堆疊。
我們用常見 string fomat 來看編譯出來是什麼
var concat = 100;
_ = $"Hello {concat}";
可以看到轉換成 IL 後程式實際做了哪些事情,如果有細心觀察一下會發現裡面偷偷做了boxing的動作。
(🎏之後會補充說明boxing跟unboxing) 補充
IL_0000: nop
IL_0001: ldc.i4.s 100
IL_0003: stloc.0
IL_0004: ldstr "Hello {0}"
IL_0009: ldloc.0
IL_000a: box [System.Private.CoreLib]System.Int32
IL_000f: call string [System.Private.CoreLib]System.String::Format(string, object)
IL_0014: pop
IL_0015: ret