a aa = new a("zhangsan", "lisi"); //请问为什么这行语句放在25行就错了! 
        static void Main(string[] args)
        {
            //Console.WriteLine(aa.firstName);
            //Console.WriteLine(aa.Name());
        }请问为什么这行语句放在25行就错了!本身没错。
不过在Console.WriteLine(aa.firstName);的时候,class Program还没有实例化,它的成员aa你当然没有办法访问。

解决方案 »

  1.   

    using System; 
    using System.Collections.Generic; 
    using System.Text; namespace 结构体 

        class Program 
        { 
            ///  <summary> 
            /// 定义了一个结构体a 
            ///  </summary> 
            static  struct a 
            { 
                public string firstName, lastName;             public a(string s1, string s2) 
                { 
                    firstName = s1; 
                    lastName = s2; 
                }             public string Name() 
                { 
                    return firstName + " " + lastName; 
                } 
            }; 
            
            //25行     
     staic a aa = new a("zhangsan", "lisi");  
            static void Main(string[] args) 
            { 
                            
                Console.WriteLine(aa.firstName); 
                Console.WriteLine(aa.Name()); 
            } 
       } 
     } 因为你的mian函数时静态的方法
    我操
    每颜色了
      

  2.   

    我感觉你的疑问主要是你对静态方法与实例方法不太理解,你可以查一下Msdn,静态类是加载包含此类的程序或者命名空间时自动加载的,而静态方法是在第一次被调用前和任何静态构造函数被调用前加载,而实例方法或者实例成员是在被生成实例时加载的。如果你理解了上面的我所说的那一段话,你再看看你的程序为什么放到25行就会出错的原因了。
    出错原因:
    如果你把aa的声明放到25号,你可以看看,aa是一个实例成员,而main方法是一个静态成员。那好,根据上面的那段话,可以看出在程序执行main前需要把main方法加载到内存中,而aa是一个实例成员需要在声明Program实例时才被加载,那么在.net执行main方法前就无法知道aa所需的内存空间,所以会出错。
    另外,估计你在学习C#时也了解到,在静态方法中只能调用静态成员。希望以上对你有所帮助。