将委托绑定到实例方法
到现在为止你已经看到了怎样将委托对象绑定到共享方法。它是通过使用AddressOf紧跟类名和共享方法名实现的。但是也能将委托绑定到实例方法,下面的例子显示了怎样将委托对象绑定到实例方法,以及与绑定到共享方法有什么不同。
实例方法与共享方法不同,它必须在定义该方法的类所建立的对象的环境中执行。所以,将委托对象绑定到实例方法要求该委托对象追踪目标对象,作为追踪目标方法实现的补充。归根结底,委托对象不会执行实例方法,除非它知道该方法的执行环境将使用什么对象。
为了建立绑定到实例方法的委托对象,你必须从建立一个对象或者得到一个定义该实例方法的类所建立对象的引用开始。例如,假定你已经建立了一个叫JerrysQuotes的类,该类包含一个叫NextQuote的实例方法,如下面的部分代码所显示:
Class JerrysQuotes
Function NextQuote(ByVal Funny As Boolean) As String
'实现代码
End Function
End Class
为了将委托对象绑定到实例方法NextQuote,你必须首先从JerrysQuotes类建立一个对象。一旦你获得了对象引用,就能建立一个委托对象并绑定到它的实例方法。使用AddressOf操作符和紧跟方法名的对象引用实现它:
Dim quotes As New JerrysQuotes()
Dim handler2 As QuoteOfTheDayHandler = AddressOf quotes.NextQuote
本例与前面的包含共享方法的例子的不同地方是委托对象必须跟踪目标对象。图2是委托对象的一些私有执行细节。你能看到,每个委托对象包含一个私有区保存指向一个方法实现的引用。绑定到实例方法的委托对象也跟踪引用到目标对象,该对象在目标实例方法执行时被使用到。

图2:实现委托对象
如果从低层思考工作是怎样进行的,委托类型并不比一个函数指针的友好的、类型安全的外在包装多什么,但是从高一些的层次考虑,它们为开发有回调需求的应用程序提供了多种可能性。委托提供了灵活、高效地实现松散结合设计的途径,在设计中通知源必须给一系列处理方法发送通知。
结论
本文简单介绍了委托。在.NET框架中引入委托用于帮助设计师和编程人员实现回调通知。委托提供了一种实现回调的混合技术,它将使用接口的类型安全性与使用函数指针的高效率和适应性结合起来。
