怎样理解“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的设计者不知道你要传递什么类型的参数