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

问题描述 投票:0回答:3

有人知道查看 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; }
           }
     }
}
c#
3个回答
8
投票

您的问题毫无意义,但您可能正在寻找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;
    }
}

4
投票

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

免费的替代方案是 dotPeek:

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

它是一个非常强大的反编译器,有很多选项,并且与购买时的 Reflector 一样好。从那以后我就没有使用过它,所以无法评论你的钱得到了什么。


另一个工具是 LINQPad:

http://www.linqpad.net/

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


0
投票

您可以使用 SharpLab 在线游乐场来实现此目的:

https://sharplab.io/

您可以看到反编译的c# 1.0代码(没有sintax shugar的c#代码)和IL代码

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.