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

原则:

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位机中),所以可以定义

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值