C# 的网络编程问题。
private static ManualResetEvent connectDone = new ManualResetEvent(false);
private void button1_Click(object sender, System.EventArgs e)
{
Socket s = new Socket AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPAddress ipaddr = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ipaddr,8900);
s.BeginConnect(ipe,new AsyncCallback(ConnectCallback),s);
connectDone.WaitOne();
}
private static void ConnectCallback(IAsyncResult ar)
{
Socket client = (Socket)ar.AsyncState;
if (client.Connected == false)
{
IPAddress ipaddr = IPAddress.Parse("127.0.0.1");
IPEndPoint ipe = new IPEndPoint(ipaddr,8900);
client.BeginConnect(ipe,new AsyncCallback(ConnectCallback),client);
}
else
{
client.EndConnect(ar);
connectDone.Set();
}
}
1。为何第一行的ManualResetEvent类型定义前要加static关键字?
2。为何后面的ConnectCallback函数的定义前面也要加static关键字?
多谢。
问题点数:50、回复次数:6Top
1 楼zhouabc(试着专业一点)回复于 2005-03-14 12:25:40 得分 0
upTop
2 楼yuqingjiang()回复于 2005-03-14 14:24:58 得分 8
尽管MSDN的例子里常有static 变量,实际上1 和 2 前都无需使用static 的关键字。static 只是表明了作用域的范围。Top
3 楼tianyajinhui(tianya)回复于 2005-03-14 14:31:05 得分 8
应该要要的吧,,否则可能编译器会报错的,因为它认为这是一个不能被改变的,所以要用static做标记,,这样就不会了,Top
4 楼lampson123(微软)回复于 2005-03-14 14:37:45 得分 4
可以不要吧,....Top
5 楼The123(Shall We Dance? :))回复于 2005-03-14 14:47:10 得分 15
private static void ConnectCallback(IAsyncResult ar)
因为它是被上面的静态方法调用的,所以需要加上关键字static
Top
6 楼zjf_dl(飘香剑雨)回复于 2005-03-14 15:00:55 得分 15
使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类型。
Top





