读书人

委托(deldgate)最大的用处是不是在多

发布时间: 2012-01-23 21:57:28 作者: rapoo

委托(deldgate)最大的用处是不是在多线程的处理?
RT,当然不算委托用在“事件”处理方面的作用。在我来看,如果在单线程的情况下,使用委托最大的作用就是回调(方便使相同的方法返回到不同的位置)。可是这个功能也可以使用其他方法轻松实现。所以在一般情况下,委托是不是没什么作用?

以下的代码是实现单击按钮后内容在不同textbox里面出现,但是使用了委托就更麻烦了,可读性也差。

例如:
Public Class Form1

'在注释中的这些代码可以很简单的实现目标。
'Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button2.Click, Button1.Click
' Dim test As New TestDeleg

' Dim button As Button = CType(sender, Button)

' If button.Name Is "Button1" Then
' TextBox1.Text = Label1.Text
' Else
' TextBox2.Text = Label1.Text
' End If

'End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button1.Click
Dim test As New TestDeleg
test.Display(label1.Text,addressof WriteT1)

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button2.Click
Dim test As New TestDeleg
test.Display (label1.Text ,addressof writeT2)
End Sub

Private Sub WriteT1(ByVal str As String)
TextBox1.Text = str
End Sub

Private Sub WriteT2(ByVal str As String)
TextBox2.Text = str

End Sub
End Class


Friend Class TestDeleg

Public Delegate Sub delegSUB(ByVal str As String)

Public Sub Display(ByVal str As String, ByVal deleg2 As delegSUB)
deleg2(str)
End Sub

End Class

[解决办法]
更加灵活的使用方法调用
用于异步回调
异步回调:由于实例化委托是一个对象,所以可以将其作为参数进行传递,也可以将其赋值给属性.这样,方法便可以将一个委托作为参数来接受,并且以后可以调用该委托.这称为异步回调,是在较长的进程完成后用来通知调用方的常用方法.以这种方式使用委托时,使用委托的代码无需了解有关所用方法的任何信息.
多线程编程中使用委托来指定启动一个线程时调用的方法
C#中的事件模型.用它们指明处理给定事件的方法
[解决办法]
如果把WriteT1和WriteT2两者之间的区别更大一些,test.Display这个方法包含更多的逻辑,这个时候,就能显示出委托的便利了

读书人网 >VB Dotnet

热点推荐