[C#.NET] 使用 Reflector.NET 反編譯 / 觀察 var 隱性函數

[C#.NET] 使用 Reflector.NET 反編譯 / 觀察 var 隱性函數

1.C#的 var隱函型別變數 相當的方便,可以讓你在不知變數型態下宣告使用之。

2.宣告方式跟一般宣告的方式一樣,var隱函型別變數 是由編譯器 (Compiler) 判斷型別後編譯而成,所以設計師不用知道變數型態,編譯器會幫你做。

3.下載 .NET Reflector,解壓縮。

快照-2009102272328 

快照-2009102272337

就用以下這段沒有營養的程式碼並建構方案,然後再用.NET Reflector 觀察VS對我們的 var 下了什麼魔法


{
    var a="點部落" ;
    var b = 10; 

    Console.WriteLine(a.GetType().Name);
    Console.WriteLine(b.GetType().Name); 

    var c = new string[] { "霹靂", "無敵", "余小章" };
    var d = new ArrayList();
    for (var i = 0; i < 10; i++)
    {
        d.Add(i);
    } 

    foreach (var item in c)
    {
        Console.WriteLine(item.GetType().Name);
    }
}

執行Reflector.exe→選擇.Net版本→開啟上面編譯好的EXE

快照-2009102273050

然後再依自己所要觀察的事件查詢。

快照-200910227335

很明顯的右邊的程式碼跟我們寫的有點不太一樣,因為VS已經幫我們判斷好資料型態並編譯完成。

4.結語:

var 雖然在偷懶時好用,但要看情況使用,否則將常到惡果;想想整段Code都是var,那將會是什麼樣的情況,var也無法取得所有類別的方法,若遇到無法取得類別方法時,表示不能用var了,還是乖乖的宣告正確的型態吧!

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo