主题:【问题求助】C#类的生成过程问题
先看段代码
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]
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]