C#反编译

时间:2012-03-20 01:14:41

标签: c# .net decompiling

我只是在Telerik的JustDecompile中浏览我自己的一些代码并注意到以下代码

   switch (data.CurrentSection) 
   {
    case SurveyData.CurrentSectionEnum.Section1:
        divSection1.Visible = true;
        divSection2.Visible = false;
        divSection3.Visible = false;
        break;
    case SurveyData.CurrentSectionEnum.Section2:
        divSection1.Visible = false;
        divSection2.Visible = true;
        divSection3.Visible = false;
        break;
    case SurveyData.CurrentSectionEnum.Section3:
        divSection1.Visible = false;
        divSection2.Visible = false;
        divSection3.Visible = true;
        break;
    }

显示为

switch (data.CurrentSection)
{
    case CurrentSectionEnum.Section1:
    {
        this.divSection1.set_Visible(true);
        this.divSection2.set_Visible(false);
        this.divSection3.set_Visible(false);
        break;
    }
    case CurrentSectionEnum.Section2:
    {
        this.divSection1.set_Visible(false);
        this.divSection2.set_Visible(true);
        this.divSection3.set_Visible(false);
        break;
    }
    case CurrentSectionEnum.Section3:
    {
        this.divSection1.set_Visible(false);
        this.divSection2.set_Visible(false);
        this.divSection3.set_Visible(true);
        break;
    }
}

这是Telerik反编译器的人工制品还是我的预感是正确的,在框架的某个较低级别部分不存在“使用等号”设置运算符?如果是这样,任何人都可以提供更多信息吗?

2 个答案:

答案 0 :(得分:6)

属性是C#(和VB.Net)语言的结构,而不是CLR。它们实现为get_XXX和set_XXX方法。

我希望反编译器识别它们!

答案 1 :(得分:0)

确保您拥有最新版本的JustDecompile。我尝试使用版本2012.1.214.2的代码,它正在生成您期望的C#。

正如其中一条评论中所提到的,getter和setter只是方法。以下是调用在IL中的显示方式:

ldloc.0
ldc.i4.1
callvirt instance void DivSection::set_Visible(bool)