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

2008-04-10 03:08:00来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

请注意 ......
著作权所有人:物泽计算机事业股份有限公司、
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)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Henry手记-VB.net WinForm中的FORM初探(二)

下一篇:VB.Net中文教程(6) 母子对象关系