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

VB.Net中文教程(7) Me参考值

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1975 更新时间:2009/4/23 19:01:09
nbsp;    Balance is 100
             Balance is 400
             Balance is 480

此程序中﹐orange先接受Display()讯息﹐印出存款额﹔再接受add(300)讯息﹐使存款额提高 300元﹐再接受Display()讯息﹐依序下去。Display()传回来目前对象orange之参考值,add()则传回新诞生对象之参考值。

 

2. 深入了解Me参考

    VB在编译时﹐会自动为程序成员产生Me参考变量﹐并令Me固定参考到目前对象(Current Object)。于此将细谈VB如何产生Me参考变量﹐让您更能深刻了解Me参考变量的特性和角色。首先﹐VB在编译程序成员时﹐会暗中偷加上1 个参考参数──Me﹐成为该程序成员的第1 个参数。例如﹕


        Class Person
            Private name As String
            Priavte age As Integer
            Public Sun New(ByVal na As String, ByVal a As Integer)
                 name = na
                 age = a
            End Sub
            Public Sub Display()
                Messagebox.Show( name  + ",  " + str( age ) )
            End Sub
         End Class

在编译此程序时﹐VB会将偷加上Me参考变量如下﹕

         Class Person
            Private name As String
            Priavte age As Integer
            Public Sun New( ByVal Me As Person, ByVal na As String,
                           ByVal a As Integer)
                 Me.name = na
                 Me.age = a
            End Sub
            Public Sub Display(ByVal Me As Person)
                Messagebox.Show( Me.name  + ",  " + str( Me.age ) )
            End Sub
         End Class

无论是在New()或Display()程序里﹐Me皆固定参考到目前对象﹐您不能改变Me之值。接下来﹐请看如何令Me参考到目前对象﹖假如有个Form1_Click()程序如下﹕
         
Sub Form1_Click( .... )
     Dim x As New Person("Tom", 26)
     x.Display()
End Sub


    VB在编译时﹐会把指令──x.Display()转换为﹕
                     Person_Display(x)

意谓着﹕呼叫Person类别的Display()程序来处理x 对象之内容。在呼叫这程序时﹐就把x参考值传递给Display()程序里的Me参数﹐如下﹕
 

于是﹐Me就固定指向x对象了﹐而这x 对象就是我们欲处理之对象﹐亦
即就是目前对象了。请再看个例子吧﹗若Person类别改为﹕

         Class Person
            Private name As String
            Priavte age As Integer
            Public Sun New(ByVal na As String, ByVal a As Integer)
                 name = na
                 age = a
            End Sub
            Public Sub Print()
                Me.Display()
            End Sub
            Public Sub Display()
                Messagebox.Show( name  + ",  " + str( age ) )
            End Sub
         End Class

 

 

则VB会为这3 个程序成员加上Me参考值。其中Print()程序转换如下﹕
         
          Public Sub Print(ByVal Me As Person)
               Person_Display( Me )
          End Sub

上述的Me.Display()转换为Person_Display( Me )之后﹐就把这Print()内的Me值传给了Display()内的Me了﹐此时两个程序内的Me皆参考到目前对象了。
    以上所提的一般程序成员并不包括共享程序成员(Shared Member Function)。还记得吗﹖共享程序成员的目的是﹕处理有关整个类别的事情﹐而不是用来处理对象之内容。在另一方面﹐Me参考到目前对象﹐一般程序成员经由Me来存取目前对象之内容。既然共享程序成员不需存取某特定对象之值﹐当然就不需要Me参考变量了﹐因之VB并不会为共享程序成员偷加上Me参考变量。简而言之﹐VB的规则是──

      「VB编译时﹐并不会为共享程序成员加上Me参考变量﹐所以
         共享程序成员里没有Me参考变量﹐也就无法存取对象之内容」

如前面所述﹐在呼叫一般程序成员时﹐必须把目前对象之参考值传递过去给该程序成员。但共享程序成员里并无Me参考﹐所以无法呼叫一般程序成员。可得知VB的规则──
    「共享程序成员不能呼叫一般程序成员﹐但可呼叫别的共享程序成员」

反之﹐一般程序成员却可呼叫共享程序成员。例如﹕

 

 

        Class Person
            Private name As String
            Priavte age As Integer
            Shared plast As Person

            Public Sun New(ByVal na As String, ByVal a As Integer)
                name = na
                age = a
                plast = Me
            End Sub
            Shared Sub DispLast()
                plast.Display()
                ''''Display()     Error !!
            End Sub
            Public Sub Print()
                 DispLast()
            End Sub
            Public Sub Display()
                 Messagebox.Show( name  + ",  " + str( age ) )
            End Sub
         End Class

Display()是一般程序成员﹐共享程序成员DispLast()不能直接呼叫Display()程序如下﹕
            Shared Sub DispLast()
                Display()     Error !!
            End Sub

因为VB会将之转换为──

            Shared Sub DispLast()
                Person_Display( Me )     Error !!
            End Sub

但DispLast()是共享程序成员﹐并无Me参考变量﹐所以错了。至于Print()
呼叫DispLast()﹐VB将之转换为──

            Public Sub Print( ByVal Me As Person )
                 Person_DispLast()
            End Sub

       虽然Print() 内有Me参考﹐但DispLast()是静态程序成员并不需要Me
﹐Print() 并未把Me传给DispLast()﹐这是对的。n


 

上一页  [1] [2] [3] 


没有相关教程
教程录入: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……
    咸宁网络警察报警平台