Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 新AsyncCallback(AddressOf函数)和AddressOf函数之间的差异_.net_Vb.net - Fatal编程技术网

.net 新AsyncCallback(AddressOf函数)和AddressOf函数之间的差异

.net 新AsyncCallback(AddressOf函数)和AddressOf函数之间的差异,.net,vb.net,.net,Vb.net,使用VB.Net异步套接字方法时,应如何定义回调函数 Private Sub ServerRunTime(Optional ByRef ListeningAddress As String = "", Optional ByRef Port As Short = 31337) Dim Listener As Socket = ConfigListener(ListeningAddress, Port) Listener.Listen(32) Lis

使用VB.Net异步套接字方法时,应如何定义回调函数

Private Sub ServerRunTime(Optional ByRef ListeningAddress As String = "", Optional ByRef Port As Short = 31337)
        Dim Listener As Socket = ConfigListener(ListeningAddress, Port)
        Listener.Listen(32)
        Listener.BeginAccept(New AsyncCallback(AddressOf OnAccept), Listener)
End Sub

Private Sub OnAccept(ByVal AcceptResult As IAsyncResult)
        Dim Listener As Socket = CType(AcceptResult.AsyncState, Socket)
        Dim aClientObj As New ClientObj
        Dim ClientID As Integer = Clients.Count

        aClientObj.ClientSok = Listener.EndAccept(AcceptResult)
        aClientObj.ClientID = ClientID
        Clients.Add(aClientObj)

        Clients(ClientID).ClientSok.BeginReceive(Clients(ClientID).RecvBuffer, 0, Clients(ClientID).RecvBuffer.Length, SocketFlags.None, AddressOf OnReceive, ClientID)
        Listener.BeginAccept(New AsyncCallback(AddressOf OnAccept), Listener)
End Sub
在上面的代码示例中,我已经测试了这两种代码

New AsyncCallback(AddressOf OnReceive)

两者产生相同的结果

那么哪一个是正确的呢? 是否可以将AsyncCallback对象创建为变量,以避免每次接收都必须创建一个新对象?

这两个选项都是正确的():

AddressOf运算符可以用作委托构造函数的操作数,也可以在编译器可以确定委托类型的上下文中使用

  • 新建AsyncCallback(AddressOf OnReceive)
    :这里,您使用AddressOf运算符作为委托构造函数的操作数
  • AddressOf OnReceive
    :在这里,编译器会自动推断委托的类型(
    AsyncCallback
第一个选项更明确,后一个选项更紧凑。用哪一种是口味的问题


关于缓存AsyncCallback对象:是的,这是可能的,但我真的怀疑性能优势(如果有的话)是否值得这么麻烦。

这两个选项都是正确的():

AddressOf运算符可以用作委托构造函数的操作数,也可以在编译器可以确定委托类型的上下文中使用

  • 新建AsyncCallback(AddressOf OnReceive)
    :这里,您使用AddressOf运算符作为委托构造函数的操作数
  • AddressOf OnReceive
    :在这里,编译器会自动推断委托的类型(
    AsyncCallback
第一个选项更明确,后一个选项更紧凑。用哪一种是口味的问题


关于缓存AsyncCallback对象:是的,这是可能的,但我真的怀疑性能优势(如果有的话)是否值得这么麻烦

AddressOf OnReceive