1:调用静态成员,可以直接用“类名.成员名”;调用非静态成员,必须先new一个对象,然后用“对象名.成员名”。
2:上面那句话,到底考没考虑主调者是啥形态啊,因为:
3:非静态方法可以直接调用静态和非静态成员(这句话是正确的)。
4:如果上面第3点是正确的,那么,下面代码
class Student
    {
        string name2 = "汤姆";
        public void ain()
        {
            Console.WriteLine(name2);
            Console.ReadKey();
        }
    } 
class A
{
  public void sex()
  {
   Student.ain();  //非静态方法调用非静态成员ain。为什么又是错的呢,上面不是说了是正确的吗?
  }
}
    
    class program
    {
       static void Main()
        {
            A a = new A();
            a.sex();
        }
    }
为什么又出错呢?
给位老师,请帮我总结一下这静态与非静态,其他理论,诸如分配内存啊之类的就不必说了,就给我总结就行了!!

解决方案 »

  1.   

     public static void ain()
      {
      Console.WriteLine(name2);
      Console.ReadKey();
      }
      

  2.   

    静态成员相当于暂时居住在这个类中也就是说它不属于这个类的成员,而new出来的是实例化了一个类的对象,也就是说非静态成员属于这个对象的一个属性!因为静态成员不是它的一个属性所以new不出来!
      

  3.   

    "非静态方法调用非静态成员ain。为什么又是错的呢,上面不是说了是正确的吗?"
    你的ain是非静态的,没问题,但是怎么能用Student.ain()来调用的呢?你这样调用根本就违背了你的原则1:“1:调用静态成员,可以直接用“类名.成员名”;调用非静态成员,必须先new一个对象,然后用“对象名.成员名”。”
    你的第二个错误:静态方法里面只能用静态的内容,你在里面new东西就是不行。这样说够直白不?
      

  4.   

    把你第三句话改一下:
    3,非静态方法可以直接调用本类和其它类的静态方法,只能调用本类的非静态成员,要调用其它类的非静态方法,要先New一下那个类
    静态成员当第一次调用时自动调用静态构造函数实例化,以后是一直存在的,直到程序结束
    非静态成员要必须New以后才存在(手动调用构造函数),其生命周期要看作用域,并非与程序同寿
    在定义一个类的时候,非静态方法访问本类的非静态成员,是假设此类已经实例化了,所有成员前面都有个this代表此类的当前对象,只不过在写代码的时候,this往往省略了
      

  5.   

     class Student
            {
               static  string name2 = "汤姆";
                public static void ain()
                {
                    Console.WriteLine(name2);
                    Console.ReadKey();
                }
            }
            class A
            {
                public void sex()
                {
                    Student.ain(); 
                }
            }        class program
            {
                static void Main()
                {
                    A a = new A();
                    a.sex();
                }
            }
    汤姆
    在静态方法中是不能直接访问非静态方法的。
    静态方法只能调用静态变量,静态方法,静态..等 
      

  6.   

    class a
    {
    public static string i = "我爱";
    public string g = "苍井空";
    static void Main()
    {
    a b = new a();   //我在静态方法里,new了一个,正确了
    Console.WriteLine("{0}{1}",i,b.g); 
    Console.ReadKey();
    }
    }