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

VB.Net中文教程(5)程序多重定义

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

请注意 ......
著作权所有人:物泽计算机事业股份有限公司、
              MISOO对象技术顾问团队、对象导向杂志作者、等。
u本文件摘自 对象导向杂志、精通对象观念与技术等书籍著作。
u本文件仅供您的参阅,请遵守著作权法,不得做其它商业用途。

 

主题:   程序多重定义(Overloading)


??????  内容  ??????
v 1. 程序成员的多重定义
   

 

 

1. 程序成员的多重定义

    「程序多重定义」(Function Overloading)又称为「程序重复定义」。它让对象更具弹性﹐能处理多样化之讯息。这观念源于日常生活经验。例如﹐我们常说﹕
                ◎  猫  玩  绣球
                ◎  猫  玩  老鼠
                ◎  猫  玩  鱼

猫玩绣球与玩老鼠之玩法不尽相同。但何以使用同一动词──「玩」呢﹖也许人们认为其目的是一致的﹕猫获得快乐。上述的「猫」为类别﹐而某只猫是对象。例如﹕加菲猫是对象﹐它可接受讯息──

                  

    其中﹐「玩」代表着动作和过程﹐而绣球、老鼠及鱼则是「玩」之对象。回想﹐在程序中﹐「程序」代表一项动作及过程﹐而「自变量值」则为程序之处理对象。因之﹐上图可表示为──
                    
                       
                图1、 play()之多重定义

    OOP 程序设计之理想为﹕让程序之写法与人们日常生活经验吻合﹐于是设计个Play()程序﹐让它能接受不同型态之资料做为处理对象。上述Play()已具「多重定义」﹐其特点是──
        1.  程序名称相同﹐例如﹕Play()。
        2.  自变量不同﹐例如﹕老鼠和鱼。

因猫玩绣球和玩老鼠的方法略有不同﹐例如老鼠是活的而绣球是死的﹐其玩的过程亦不尽相同。为了表示动作与过程之不同﹐Play()程序内之指令也有所不同。例如﹕

           

写VB程序时﹐其格式必须是──

              Class Cat
                 Public Overloads Sub Play(绣球)
                    指令
                    .......
                 End Sub
                 Public Overloads Sub Play(老鼠)
                    指令
                    .......
                 End Sub
                 Public Overloads Sub Play(鱼)
                    指令
                    .......
                 End Sub
              End Class

这就是「程序成员多重定义」了。Cat 类别含有三种Play()之定义﹐其自变量不同而且内部指令亦不相同。于是Play()程序能接受不同之自变量﹐并执行不同之指令﹐使得Play()具弹性了。请看个程序──

''''ex01.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''-------------------------------------------------------
Class Example
    Public Overloads Sub Display()
        MessageBox.Show("****")
    End Sub
    Public Overloads Sub Display(ByVal r As Integer)
        MessageBox.Show(str(r))
    End Sub
    Public Overloads Sub Display(ByVal f As Double)
        MessageBox.Show(str(f + 2))
    End Sub
    Public Overloads Sub Display(ByVal s As String)
        MessageBox.Show(s)
    End Sub
End Class
''''--------------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
    ........
#End Region
    Protected Sub Form1_Click( ByVal sender As Object, ByVal
                            e As System.EventArgs)
        Dim a As New Example()
        a.Display()
        a.Display("Taiwan")
        a.Display(80)
        a.Display(100.5)
    End Sub
End Class

此程序输出如下﹕   ****
Taiwan
80
102.5

    这Example类别比较特殊﹐没有资料成员﹔但含有一个程序成员叫Display() 。而Display()有 4个不同之版本(定义)﹐可任君(计算机)挑选。计算机藉比对自变量来挑选「最相配」之Display()程序。
     例如﹕计算机执行到指令──
                      a.Display("Taiwan")

由于自变量── "Taiwan"是字符串﹐其型态应配上String﹐所以计算机挑选并且执行第 4个程序──  Display( ByVal s As String ) 。同理﹐当计算机执行到指令──
                      a.Display(100.5)

由于自变量──100.5之型态为Double﹐所以计算机选上并执行第 3个Display()程序── Display(ByVal f As Double )。同一程序名称但有数个不同之定义﹐各有不同之自变量及内部指令﹐此种现象就是「程序的多重定义」。

         

请再看个例子──

''''ex02.bas
Imports System.ComponentModel
Imports System.Drawing
Imports System.WinForms
''''--------------------------------------------------
Class Sum
    Private s As Integer
    Public Overloads Sub Add()
        s = 3 + 5
    End Sub
    Public Overloads Sub Add(ByVal x As Integer)
        s = x + 5
    End Sub
    Public Overloads Sub Add(ByVal x As Integer, ByVal y As Integer)
        s = x + y
    End Sub
    Public Sub Show()
        MessageBox.Show("Sum = " + str(s))
    End Sub
End Class
''''---------------------------------------------------
Public Class Form1
    Inherits System.WinForms.Form
   
    Public Sub New()
        MyBase.New()
        Form1 = Me
        ''''This call is required by the Win Form Designer.
        InitializeComponent()
        ''''TODO: Add any initialization after the InitializeComponent() call
    End Sub
    ''''Form overrides dispose to clean up the component list.
    Public Overrides Sub Dispose()
        MyBase.Dispose()
        components.Dispose()
    End Sub
#Region " Windows Form Designer generated code "
      ........
#End Region
    Protected Sub Form1_Click( ByVal sender As Object, ByVal
                            e As System.EventArgs)
        Dim a As New Sum()
        a.Add()
        a.Show()
        a.Add(80)
        a.Show()
        Dim b As New Sum()
        b.Add(100, 27)
        b.Show()
    End Sub
End Class

此程序输出如下﹕   Sum = 8
                   Sum = 85
      &n

[1] [2] [3] [4]  下一页


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