发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:7609, 日期:2003-08-29
Visual Basic.NET包括了对委派(delegate)的支持,这就提供了安全的函数指针(function pointer)。委派能够被用来在运行期间动态地拾取特定的函数。
在你声明一个委派的时候,你就要为方法定义一个原型(prototype)。委派会决定自变量的数量和类型,以及返回值,如果有的话。委派所指向的任何方法都必须符合这个特征。
你可以使用下面的代码来声明一个委派:
Private Delegate Sub PresentError(ByValMsg As String)
你也可以定义符合委派特征的多个方法。
Private Sub DisplayMsg(ByValMsg As String)
MsgBox(Msg)
End Sub
Private Sub WriteMsgToOutput(ByValMsg As String)
Debug.WriteLine(Msg)
End Sub
要使用委派,你就需要为它创建一个实例,并把真实方法的地址传递给构造函数。这样这个函数就可以通过Invoke方法被调用了。
Dim test As New PresentError(AddressOfDisplayMsg)
test.Invoke("This is a test")
现在调用委派就会在MessageBox信息框里显示上面这条信息。要更改委派所参照的方法,只用简单地更改传递给构造函数的方法就行了。
Dim test As New PresentError(AddressOfWriteMsgToOutput)
现在,调用委派就会把这条信息写到输出窗口里。
委派对于增强你应用程序的扩展能力很有好处。你也可以用它来选择在运行期间所要执行的函数。
在你声明一个委派的时候,你就要为方法定义一个原型(prototype)。委派会决定自变量的数量和类型,以及返回值,如果有的话。委派所指向的任何方法都必须符合这个特征。
你可以使用下面的代码来声明一个委派:
Private Delegate Sub PresentError(ByValMsg As String)
你也可以定义符合委派特征的多个方法。
Private Sub DisplayMsg(ByValMsg As String)
MsgBox(Msg)
End Sub
Private Sub WriteMsgToOutput(ByValMsg As String)
Debug.WriteLine(Msg)
End Sub
要使用委派,你就需要为它创建一个实例,并把真实方法的地址传递给构造函数。这样这个函数就可以通过Invoke方法被调用了。
Dim test As New PresentError(AddressOfDisplayMsg)
test.Invoke("This is a test")
现在调用委派就会在MessageBox信息框里显示上面这条信息。要更改委派所参照的方法,只用简单地更改传递给构造函数的方法就行了。
Dim test As New PresentError(AddressOfWriteMsgToOutput)
现在,调用委派就会把这条信息写到输出窗口里。
委派对于增强你应用程序的扩展能力很有好处。你也可以用它来选择在运行期间所要执行的函数。