C#类可以自引用(建立在类是引用类型的基础上)

王朝学院·作者佚名  2009-12-15
窄屏简体版  字體: |||超大  

原则:

1、C++的类类型是值类型,也就是说实例化个类对象的时候,内存分配在栈上。

这样如果类类型这样定义的时候

class A

{

public:

int i;

A a;

}

就会陷入无限的死循环,因为实例化一个A的对象object的时候,A要根据成员类型去计算这样一个对象要占用的内存空间(数据成员根据类型确定,成员函数的代码存一份在exe映射到内存,用一个指针指向内存地址即可,另外再加一些类描述信息,但sizeof不显示这部分描述信息的内存占用),遇到自身类型的对象a的时候,又去计算a所用的内存空间,而a又是个A类型,所以重复进行。

所以在C++中

可以包含自身类型的指针(链表中经常这样使用)

class A

{

public:

int i;

A * pa;

}

指针变量所占的内存空间是容易确定的,几位的机器字长,指针变量即占用多少空间

2、C#中类类型是引用类型,本质是个指针

所以C#中所有类对象本身都是4字节(32位机),包含一个内存地址,这个地址指向堆内存空间

class A

{

public int i;

public A a;

}

A object = new A();

object本身占用4字节内存,存放堆内存地址,这块内存的大小是8字节(int 4字节,a也是四字节),当成员a实例化的时候,只是a的内容不是null了,存放堆内存中的另一个地址,指向一块8字节内存空间。

因为能确定A的一个对象占用多少内存空间(4字节,C#所有类对象都是占4字节,在32位机中),所以可以定义

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航