先看段代码

Class A 
{
  public void test()
   {
      A a=new A ();
       show(); 
   }
  
   public void show()
   { Console.write("ABC");}
  
}

Class program
{
  static void Main(string[] args)
        {
           
        }
}

------------------------------------------------------------------------
上面的代码在类函数中定义了一个本类的实例!

这个应该怎么去理解??



C#的编译器的工作原理是怎么样的??

然后运行的时候又是怎么样的??


我们看这句  A a=new A();
他的作用就是在堆栈中开辟一个内存空间  然后把这个连续的内存空间地址赋值给引用变量a


这个时候问题就出来了     因为这句是写在类的定义时  
因为定义还没写完  系统不知道A类型的空间大小  那就不能为A类型分配内存空间

【问题】1. [B]系统是怎么计算A类型的大小?[/B]



---------------------------------------------------------------------
根据 C++ 的理论
系统未对象分配内存只计算非静态的成员变量

上面的C#例子中根本没有定义非静态的成员变量
用C#的概念就是没有静态字段 
那么这个A类空间为0  所以就不用分配内存。


【问题】2.  [B]我这么理解对吗??[/B]