工具查看编译器生成的代码

时间:2010-02-03 02:52:55

标签: c#

有人知道查看C#编译器生成的委托代码的工具吗?

我想验证以下内容

class X
{
     public event D Ev;
}

编译为:

class X
{
     private D __Ev;  // field to hold the delegate

     public event D Ev {
           add {
                lock(this) { __Ev = __Ev + value; }
           }

           remove {
                lock(this) { __Ev = __Ev – value; }
           }
     }
}

2 个答案:

答案 0 :(得分:6)

你的问题毫无意义,但你可能正在寻找Reflector

编辑:现在,您的问题确实有意义。你还在寻找Reflector 但是,您需要在选项中将优化设置为无。

它揭示了,

private EventHandler<MyEventArgs> MyEvent;
public event EventHandler<MyEventArgs> MyEvent
{
    [MethodImpl(MethodImplOptions.Synchronized)] add
    {
        this.MyEvent = (EventHandler<MyEventArgs>) Delegate.Combine(this.MyEvent, value);
        return;
    }
    [MethodImpl(MethodImplOptions.Synchronized)] remove
    {
        this.MyEvent = (EventHandler<MyEventArgs>) Delegate.Remove(this.MyEvent, value);
        return;
    }
}

答案 1 :(得分:0)

Reflector被RedGate收购,现在已成为商业产品。

免费替代方案是dotPeek:

https://www.jetbrains.com/decompiler/

这是一个非常强大的反编译器,有很多选项,每一点都和Reflector在购买时一样好。我没有用它,因为不能评论你得到的钱。

另一个工具是LINQPad:

http://www.linqpad.net/

在您键入时(它很方便)它会反汇编C#并显示CIL。但是,它不会尝试将其反编译回C#。