2012-03-20 93 views
1

我只是通过一些在Telerik的JustDecompile我自己的代码浏览,发现下面的代码C#反编译

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的闪客的制品或者我的预感是否正确,在框架的某个低层部分是否存在'使用等号'运算符'?如果有的话可以提供更多信息?

+0

可能重复(http://stackoverflow.com/questions/1209359/properties-and-methods) – Joe 2012-03-20 01:19:47

+2

显然不是一个很好的反编译。 – 2012-03-20 01:58:36

回答

6

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

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

+0

这不是真的。属性确实存在于CLR级别(参见例如'PropertyInfo'),但你说得对,setter和getter只是方法。 – svick 2012-03-20 02:19:55

+0

你是对的 - 程序集确实包含描述属性的元数据。反编译器应该选择它的另一个原因。 – 2012-03-20 02:32:14

0

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

正如其中一条评论所述,getter和setter只是方法。下面是调用如何看待在IL:

ldloc.0 
ldc.i4.1 
callvirt instance void DivSection::set_Visible(bool) 
[属性和方法】