class Class1
{
[STAThread]
static void Main(string[] args)
{

Class1 Class1=new Class1();
                           Class1.bb();
Class1.aa();

} public static void bb()
{}
public void aa()
{}
}这段代码没有错误 class Class1
{
[STAThread]
static void Main(string[] args)
{
Class1.bb();
Class1 aa=new Class1();
aa.aa();

} public static void bb()
{}
public void aa()
{}
}
但是这段有错误
什么原因
.NET里里面没有规定类名和实例名不能一样

解决方案 »

  1.   

    不好意思,第二段代码应该是这样的
    class Class1
    {
    [STAThread]
    static void Main(string[] args)
    {
    Class1.bb();
    Class1 Class1=new Class1();
    Class1.aa();

    } public static void bb()
    {}
    public void aa()
    {}
    }
      

  2.   

    第一段
    Class1 Class1=new Class1();
    Class1.bb();
    Class1.aa();
    Class1始终代表一个东西,就是类Class1的实例。所以不会出错。第二段
    Class1.bb();
    Class1 Class1=new Class1();
    Class1.aa();
    因为执行了第一句Class1.bb();这时Class1.bb()的Class1就已经代表静态方法bb()的所属类,然后再执行 Class1 Class1=new Class1(); 的时候第一个Class1依然没有错,因为它还是代表代表静态方法bb()的所属类,然后接下来的那个Class1就会出错,因为这个Class1代表的静态方法bb()的所属类的一个实例,这样就会使Class1含有不同的含义,出错!!最后想说一句是....你的老师好牛!!!  -_-##
      

  3.   

    这个不是C#语法漏洞,可以说不是任何问题。基本任何语言都有这个规定,不能允许一个变量名存在二义性。比如for(int i=0;i<6;++i)
    {  
          for(int i=0;i<8;++i)  //这里就不能再用i,因为i具有二义性,下面不知道到底是哪个i
            {
                  Console.WriteLine(i);
             }
    }在你的例子二中,Class1此时具有二义性,程序不知道指的是类名还是实例名,当然会错。北大青鸟水平远远不如一个大型软件企业,你们老师,如果不是唬人,就是白痴。
      

  4.   


    呵呵
    只有北大青鸟的人才会这样写程序 Class1 Class1 = new Class1();连最简单二义性都没搞明白
      

  5.   

    是青岛的北大出来的吧。
    估计你们老师常写:
    int a = a; (C++下)
    可以么,可以,有用么,无聊。
      

  6.   

    这是C#的语法规范漏洞……C#语法规范既没有约定不许这么写,又没有约定冲突处理办法……
    是不是牛人应该这样说,他是Microsoft MSN Spaces主要负责人、Microsoft Word产品经理、Google Desktop Search Engine技术骨干之类……