產生情況:
有時,一個軟件總體框架不會變化,但是隨著需求不同,在個總體框架下會有具體的變化。也說是說,開發明細分成了兩個部份,一是框架部份,一個是具體實現部份。總體部份在某個時候使用一個接口中,而實現部份就是對這個接口的實現。
為了敘述方便,把框架部份稱為服務端;具體實現部份稱為客戶端。
功能:
委派的目的就是,保證服務端在指定地方,動態執行客戶端指定的方法。
其中:被指定的方法,對於服務端來說是變化的,由客戶端的使用者自行指定。
具體使用過程:
一、以下是服務端過程
1 申明一個公有的委派方法格式:Public Delegate Sub 自定義過程名xx (參數表)
2 用1中的申明定義一個它的變量 格式 :
dim 委派方法變量yy as 自定義過程xx
3 在其它過程中調用” 委派方法變量yy”
注:這個” 委派方法變量yy”是以方法形式調用
二、以下是客戶端過程
1 在客戶端定義一個要被服務端調用的方法
語法格式:
Dim Sub 客戶端另定義過程名zz(參數表)
2 在客戶端使用時,生成一個”委派方法對象”,並傳遞給服務端
生成語法格式:
Dim 委派方法對象 As New 自定義過程名xx (客戶端另定義過程名zz的入口地址)’注冊委派對象
3 啟動服務端相關的運行方法
''以下是服務端
‘------------------------
‘Delegate方法,用於向某個傳 ?注冊 ?的方法(注冊 的Method的參 ?必須 和Delegate方法完全一致)
Public Delegate Sub PrintDelgate(ByVal str As String)
''把Delegate方法注冊 在這 ?Class裡,在外就能傳 ?方法了!
Dim innerDel As PrintDelgate
Public Sub New(ByVal outDel As PrintDelgate)
innerDel = outDel
End Sub
Public Sub innerPrint(ByVal str As String)
MsgBox(str + "1")
innerDel(str)
End Sub
End Class
‘-----------------------------
‘以下是客戶端使用委派
‘------------------------------------
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim instance As New PrintDelgate(AddressOf outPrint)’注冊委派對象
Dim print As New TestDelegate(instance) ''把委派對象傳遞給服務端
print.innerPrint("shit") ''調用服務端中的委派方法
End Sub
Sub outPrint(ByVal sss As String) ''要加入的處理工作
MsgBox(sss + "2")
End Sub