2012-03-20 10 views
1

私はTelerikのJustDecompileに自分のコードの一部を拾い読みしてC#逆コンパイル

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デコンパイラまたはのアーチファクトこのたとして、次のコード

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; 
    } 

が表示されていたことに気づきました。フレームワークのいくつかの下位レベルの部分に「等号を使用して設定された」演算子が存在しないという私の感覚は正しいでしょうか?もしそうなら誰ももっと情報を提供できますか?

+0

[プロパティとメソッド]の可能複製(http://stackoverflow.com/questions/1209359/properties-and-methods) – Joe

+2

は明らかに非常に良いではありません逆コンパイラ。 –

答えて

6

プロパティは、CLRではなくC#(およびVB.Netも)言語の構文です。それらはget_XXXおよびset_XXXメソッドとして実装されています。

私はデコンパイラがそれらを認識すると期待します!

+0

これは本当に真実ではありません。プロパティはCLRレベルに存在します(例えば 'PropertyInfo'を参照)が、setterとgetterが単なるメソッドであることは間違いありません。 – svick

+0

あなたはそうです - アセンブリにはプロパティを説明するメタデータが含まれています。逆コンパイラがそれらを拾うべきもう一つの理由。 –

0

JustDecompileの最新バージョンを使用していることを確認してください。私はバージョン2012.1.214.2であなたのコードを試して、あなたが期待するC#を生成しています。

コメントの1つで説明したように、ゲッターとセッターは単なるメソッドです。ここでの呼び出しはILに見てどのようにされています

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