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关键字?
多谢。

解决方案 »

  1.   

    尽管MSDN的例子里常有static 变量,实际上1 和 2 前都无需使用static 的关键字。static 只是表明了作用域的范围。
      

  2.   

    应该要要的吧,,否则可能编译器会报错的,因为它认为这是一个不能被改变的,所以要用static做标记,,这样就不会了,
      

  3.   

    private static void ConnectCallback(IAsyncResult ar)因为它是被上面的静态方法调用的,所以需要加上关键字static
      

  4.   

    使用 static 修饰符声明属于类型本身而不是属于特定对象的静态成员。static 修饰符可用于字段、方法、属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类型。