public class a
  {
    int a;
    public void a()
    {    }
  }编译提示:“a”: 成员名称不能与它们的封闭类型相同可以想办法让它编译通过吗?
因为有的程序反编译后会形成这样,顺便问一下,为什么反编译后,类名、字段名、方法名会变成一样,有办法避免吗?

解决方案 »

  1.   

    你手动修改类型的名称就可以的了public class a
      {
        int age;
        public void method()
        {    }
      }可能在你类的定义有关,你定义的时候最好字段和方法都有具体的一个含义,比如你要定义一个Person类,你应该定义字段为
    string name ,int age,而不是定义 string a,int b这样的
      

  2.   

    “反编译”程序又不是微软官方出的,也不保证一定和原来的程序一样。(编译器也可能有bug,但是相对来说,编译器的设计目标是完全按照源程序获得精确可靠的目标程序,这个过程是不允许有失真的)所以,以后不要说反编译回来如何如何,你应该拿IL说话。你拿出IL,并且确信这个IL是C#编译器直接产生的结果,再说它的等价C#代码形式是什么。
      

  3.   

    要记住,C#语言产生的IL只是IL特性的一个子集,所以,完全存在无法用C#语言表述的IL的代码的情况,这时候你依照一个反编译程序给你瞎转换,造成转换出来的代码和IL不同甚至不能编译,这是不奇怪的。我举一个例子吧,当然这是一个善意的例子,并非“反编译程序”的BUG,但是目的让你知道,反编译程序遇到C#不支持的IL的时候,完全可以编译出超越C#语法的东西:
    http://www.cnblogs.com/mgen/archive/2012/05/28/2520907.html