A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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


[vb] view plain copy 在CODE上查看代码片派生到我的代码片
'方法一  
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的正确表达式


[vb] view plain copy 在CODE上查看代码片派生到我的代码片
Dim a as New ClassA()  

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

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

  总结

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马