| 能为空引用,也不能引用派生相近程度较大的类型的对象。值类型的变量赋值会创建所赋的值的副本,当然会新开辟一块内存区来保存值。”
“哦,我明白了。它们还有什么区别没有?”我对结构和类的区别第一次有了深刻的感觉。
“当然有很多,比如所有的结构成员都默认为 Public,类变量和常量默认为 Private,其他的类成员默认为 Public;结构成员不能声明为 Protected,类成员可以;结构过程不能处理事件,类过程可以;结构变量声明不能指定初始值、New 关键字或数组初始大小,类变量声明可以。”大李喝了口水,停了一下,然后继续说。
“结构从不终止,所以公共语言运行库从不在任何结构上调用 Finalize 方法;类可由垃圾回收器终止,垃圾回收器会跟踪未完成的引用直到某个特定的实例,当检测到没有剩下的活动引用时,垃圾回收器将在类上调用 Finalize。”
“这个我可以理解,因为结构是值类型,是由系统统一管理内存,不是引用,所以不会对内存造成危害。”我接着说了两句。
“还有,你刚才也提到了它们之间一个很重要的区别:结构是不可继承的,而类可以继承。其实结构自身是从 ValueType 类隐式继承下来的。数据类型可分为值类型和引用类型。值类型要么是堆栈分配的,要么是在结构中以内联方式分配的。引用类型是堆分配的。引用类型和值类型都是从最终的基类 Object 派生出来的。当值类型需要充当对象时,就在堆上分配一个包装,该包装能使值类型看上去像引用对象一样,并且将该值类型的值复制给它。该包装被加上标记,以便系统知道它包含一个值类型。这个进程称为装箱,其反向进程称为取消装箱。装箱和取消装箱能够使任何类型像对象一样进行处理。”
“哦,我明白为什么结构也能被实例化成对象了!”我心中喜不自禁。“类的继承我在用C++和Java时也经常使用,但是VB6是不支持继承的,上次您提到VB.NET可以支持继承了,它是怎么做到的呀!”
(未完待续)
---------------------------------------------------------------
声明:本文版权与解释权归韩睿所有,如需转载,请保留完整的内容及此声明。
QQ: 18349592
E-Mail: henry7685@hotmail.com 请访问本人专栏:http://www.csdn.net/develop/author/netauthor/Latitude/
上一页 [1] [2] |