.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 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值