.NET開發人員十大必備下載工具之Lutz Roeder 的 .NET Reflector

下一個必不可少的工具稱爲 .NET Reflector,它是一個類瀏覽器和反編譯器,可以分析程序集並向你展示它的所有祕密。.NET 框架向全世界引入了可用來分析任何基於 .NET 的代碼(無論它是單個類還是完整的程序集)的反射概念。反射還可以用來檢索有關特定程序集中包含的各種類、方法和屬性的信息。使用 .NET Reflector,你可以瀏覽程序集的類和方法,可以分析由這些類和方法生成的 Microsoft 中間語言 (MSIL),並且可以反編譯這些類和方法並查看 C# 或 Visual Basic ?.NET 中的等價類和方法。

  爲了演示 .NET Reflector 的工作方式,我將加載和分析前面已經顯示的 NUnitExample 程序集。Figure 7 顯示了 .NET Reflector 中加載的該程序集。

Figure 7 NUnitExample 程序集

  在 .NET Reflector 內部,有各種可用來進一步分析該程序集的工具。要查看構成某個方法的 MSIL,請單擊該方法並從菜單中選擇 Disassembler。

  除了能夠查看 MSIL 以外,你還可以通過選擇 Tools 菜單下的 Decompiler 來查看該方法的 C# 形式。通過在 Languages 菜單下更改你的選擇,你還可以查看該方法被反編譯到 Visual Basic .NET 或 Delphi 以後的形式。以下爲 .NET Reflector 生成的代碼:

public void HashtableAddTest()
{
Hashtable hashtable1;
hashtable1 = new Hashtable();
hashtable1.Add("Key1", "Value1");
hashtable1.Add("Key2", "Value2");
Assert.AreEqual("Value1", hashtable1["Key1"],
"Wrong object returned!");
Assert.AreEqual("Value2", hashtable1["Key2"],
"Wrong object returned!");
}


  前面的代碼看起來非常像我爲該方法實際編寫的代碼。以下爲該程序集中的實際代碼:

public void HashtableAddTest()
{
Hashtable ht = new Hashtable();

ht.Add("Key1", "Value1");
ht.Add("Key2", "Value2");

Assert.AreEqual("Value1", ht["Key1"],
"Wrong object returned!");
Assert.AreEqual("Value2", ht["Key2"],
"Wrong object returned!");
}


  儘管上述代碼中存在一些小的差異,但它們在功能上是完全相同的。

  雖然該示例是一種顯示實際代碼與反編譯代碼之間對比的好方法,但在我看來,它並不代表 .NET Reflector 所具有的最佳用途 — 分析 .NET 框架程序集和方法。.NET 框架提供了許多執行類似操作的不同方法。例如,如果你需要從 XML 中讀取一組數據,則存在多種使用 XmlDocument、XPathNavigator 或 XmlReader 完成該工作的不同方法。通過使用 .NET Reflector, 你可以查看 Microsoft 在編寫數據集的 ReadXml 方法時使用了什麼,或者查看他們在從配置文件讀取數據時做了哪些工作。.NET Reflector 還是一個瞭解以下最佳實施策略的優秀方法:創建諸如 HttpHandlers 或配置處理程序之類的對象,因爲你可以瞭解到 Microsoft 工作組實際上是如何在框架中生成這些對象的。

  .NET Reflector 由 Lutz Roeder 編寫,下載地址是:http://www.aisto.com/roeder/dotnet

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章