简述对象引用和对象的区别

       在做机房的时候,遇到最多的问题就是“未将对象引用添加到对象实例”。每次遇到这样的问题,我一直在想:我在类中明明实例化类了,为什么还会出现这样的问题?还有“对象引用”什么意思?带着这些问题从网上查了一些关于对象引用和对象的知识,现做一下总结:

  现在有一个类ClassA,对它进行实例化的过程如下: 

'方法一
Dim a = New ClassaA()
'方法二
Dim a as ClassA
a= New ClassA()
  有一段时间,我认为这是实例化类的方法之一,其实不然。这只是对实例化对象的引用,而不是对类的实例化。单看这行代码“Dim a = New ClassA()”其中包含4条信息:

  1)右边的“New ClassA”,是以ClassA类为模板,在堆空间里创建一个ClassA类对象(也简称为ClassA对象)。
  2)末尾的()意味着,在对象创建后,立即调用ClassA类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,.Net会给你补上一个默认的构造函数。
  3)左边的“ClassA a”创建了一个ClassA类引用变量。所谓ClassA类引用,就是以后可以用来指向ClassA对象的对象引用。
  4)“=”操作符使对象引用指向刚创建的那个ClassA对象。

   实例化类ClassA的正确表达式

Dim a as New ClassA()

  对象引用和对象实例的区别:

  Dim a As ClassA,定义一个可以引用ClassA类型对象的变量a。这个a变量存在于栈上。
  a=New ClassA()。New ClassA()创建ClassA实例对象,这个对象存在于托管堆上。然后(同时)让a引用(指向)这个对象。
  a变量在栈上,而对象在托管堆上。
  a储存的是对象的地址,而不是对象本身。

  总结

  不将就是发现问题的原动力,通过这个小问题,也找到了很多关于.Net内部运行机制的一些知识。下篇文章会将这些知识做一个总结....


  

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值