日期:2014-05-17  浏览次数:20892 次

怎样理解“Socket listener = (Socket)ar.AsyncState”,
首先谢谢各位,在以下例子中,
怎样理解“Socket listener = (Socket)ar.AsyncState”,将对象转换成接口吗?
我们知道ocket 是一个实现了伯克利的套接字接口,而AsyncState为IAsyncResult的一个属性,是object类型,很奇怪哦~


        public void OnConnectRequest(IAsyncResult ar)
        {
            // 获取客户请求的socket
            Socket listener = (Socket)ar.AsyncState;
            //返回新的socket对象,用来向远程主机发送数据和从远程主机接收数据
            Socket sConn = listener.EndAccept(ar);
            NewConnection(sConn);

            //远程终端的网络地址和端口号
            string s = sConn.RemoteEndPoint.ToString();
            AddClientToListBox(s);
            listener.BeginAccept(new AsyncCallback(OnConnectRequest), listener);
        }   

------解决方案--------------------
正因为它是一个object类型,如果不做强制类型转换,没办法传给Socket类型。

本质上说,强制类型转换只是绕过了编译器的类型检查——编译器不允许不同类型的变量赋值。强制类型转换就是告诉编译器让它放行。至于这个object是否真的是Socket,运行期间才知道。
------解决方案--------------------
这就是.net framework的设计者不知道你要传递什么方法 -->  这就是.net framework的设计者不知道你要传递什么类型的参数