转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Henry的VB.NET之旅(四)—类和结构         ★★★★

Henry的VB.NET之旅(四)—类和结构

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1456 更新时间:2009/4/23 19:01:31

         Henry的VB.NET之旅(四)—类和结构

                                    韩睿

 

刚上班,就被大李找去了。“Henry,昨天对窗体的操作给你最大的体会是什么?”

“当然有体会,最深的印象就是VB.NET中类是无所不在了,连窗体都成为了一个类。”我深有感触地说。

“没错,类是我们用来构造VB.NET应用程序时的最基本的编程结构了。你也学习过最基本的面向对象编程了,那么你能告诉我,结构与类有什么相似之处与不同之处吗?”

“好的。”我口中回答着,心里还是有点不以为然,“结构和类,都是对成员的封装方式,但是类可以支持继承……”

大李一边点着头,一边听我说,听到我最后支吾着没了声音才抬起头“还有呢?”

“没了。”我这时才开始心中发慌。

“呵呵,相同之处我想你心中还是明白的,它们都含有成员,包括构造函数、方法、属性、字段、常量、枚举和事件。都可以实现接口,都有共享的构造函数。”

“对不起,最后那一句,都有构造函数是什么意思?结构的构造函数我从来没有自己定义过。”

大李立刻写下了这一段代码:

 

Structure SHenry

    Public x, y As Integer

    Public Sub New(ByVal x As Integer, ByVal y As Integer)

        Me.x = x

        Me.y = y

    End Sub

End Structure

Sub main()

    Dim H1 As SHenry = New SHenry()

    Dim H2 As SHenry = New SHenry(2, 1)

End Sub

 

“真的呢,可以实现结构的构造函数!”我还一直没有注意过这个问题。“可是,你只定义过一个带参数的构造函数,H2的实例化我是明白的,可是H1怎么也能通过编译器检测呢?”其实我心中更想问的是结构怎么也能实例化成对象,那和类真的很象呀。

“原因么,”大李推了推眼镜,“每个结构都隐式地具有 Public 无参数实例构造函数,该构造函数产生结构的默认值。所以你平时不写构造函数,也一样可以New出一个结构来,对吧?事实上,我们反而在结构类型声明中不可能声明无参数实例构造函数。只能声明‘参数化’实例构造函数。”

“都可以用new来实例化,结构和类在内存分配上难道也是一样的吗?”这个问题我一直挺不明白,正好借这个话题问一下。

“在这上面,差别可就大了。”看到大李喜笑颜开的样子,我就知道问到点子上了,立刻摆开架势,作认真倾听状。

“简单来说,结构是值类型,而类是引用类型。因此,结构使用堆栈分配,类使用堆分配。”

看到我迷茫的双眼,大李笑了笑,在电脑上飞快地写了个示例:

 

Class CHenry

        Public z As Integer = 0

    ‘能对非静态成员初始化也是一个区别

End Class

Sub main()

   Dim H1 As SHenry = New SHenry(0, 2) ''''赋给H1.x=0

   Dim H2 As SHenry = H1

   H2.x = 26

   Dim R1 As New CHenry() ''''R1.z也是等于0

   Dim R2 As CHenry = R1

   R2.z = 26

   Console.WriteLine("H1.x= " & H1.x & ",H2.x= " & H2.x)

   Console.WriteLine("R1.z= " & R1.z & ",R2.value= " & R2.z)

End Sub

 

“你看一下结果应该是什么?”大李一边说,一边运行了程序:

H1.x= 0,  H2.x= 26

R1.z= 26,  R2.value= 26

 

大李看着我瞪圆的双眼,慢慢地说:“这就是值类型和引用类型的差别。结构的实例 H2.x 赋值并不影响H1.x,这是因为虽然它们同属于一种SHenry结构,但它们都有各自的存储空间。相反,给 R2.z赋值26后; 则会影响R1 和 R2 都引用的对象”

“说得更清楚一点,类作为引用类型,是存储在运行时的堆上,只能通过引用该存储来访问它们,不能直接访问。引用类型的变量总是包含该类型的值引用,或包含空引用。空引用不引用任何内容;除分配空引用外,对空引用进行的任何操作都是无效的。引用类型的变量赋值只会创建引用的一个副本,而不是所引用的值的副本。它们实际上都是会指向同一块存储区的。”大李手指了指运行的结果。

“结构是直接存储在堆栈上,要么在数组中,要么在另一个类型中。当包含结构实例的位置被销毁时,结构实例也会被销毁。值类型总是可以直接访问。我们不能创建对值类型的引用,也不能引用已销毁的值类型实例。值类型的变量总是包含此类型的值。与引用类型不同,值类型的值不

[1] [2]  下一页


[C语言系列]NET 中C#的switch语句的语法  [系统软件]托拽Explore中的文件到VB.net的窗口
[系统软件]Boost库在XP+Visual C++.net中的安装  [常用软件]新配色面板:Paint.Net3.0RC1官方下载
[常用软件]用内建的“Net Meeting”聊天  [VB.NET程序]Henry的VB.NET之旅(三)—共享成员
[VB.NET程序]Henry的VB.NET之旅(二)—构造与析构  [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体
[VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET)  [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台