0

已经坐了一个小时的代码,我什么都没想。疲劳的。

我有一堂课:

class ConnectionThread
        {
            public TcpListener threadListener;

            public ConnectionThread(TcpListener lis)
            {
                threadListener = lis;
                ThreadPool.QueueUserWorkItem(new WaitCallback(HandleConnection));

            }

            public void HandleConnection(object state)
            {

                TcpClient client = threadListener.AcceptTcpClient();

                Byte[] bytes = new Byte[25600000];
                String data = null;

                NetworkStream stream = client.GetStream();

                int i;
                while ((i = stream.Read(bytes, 0, bytes.Length)) != 0)
                {
                    // I WANT INCLUDE HERE CODE OUT OF CLASS!!!
                }
                stream.Close();
                client.Close();
            }
        }

如果我的课程在附加文件中,那么在 while 循环中包含代码的更好方法是什么?例如在 while 中包含这个:

                data = System.Text.Encoding.Default.GetString(bytes, 0, i);
                MessageBox.Show("Received: " + data);

                data = data.ToUpper();

                byte[] msg = System.Text.Encoding.Default.GetBytes(data);

                stream.Write(msg, 0, msg.Length);
                MessageBox.Show("Sent: " + data);
4

3 回答 3

2

看看ActionFunc。有几个具有不同参数的重载。另一种方法是通过使类抽象并定义派生类中的行为来解决这个问题。

于 2013-11-02T09:34:23.867 回答
0

您不能像在 C++ 中那样包含外部文件。

您有部分类和部分方法,但不能直接包含代码段。您可以将代码包装在静态方法中,然后将适当的值作为参数传递。如果你使用该[AggressiveInlining]属性,代码应该是内联的,你可以得到代码包含的效果。

对于你想做的事情,我认为只有复制粘贴才能工作。

于 2013-11-02T09:30:04.833 回答
0

使用依赖注入..就像创建一个接口或抽象类,在其中声明方法签名。在另一个类中实现此接口之后。在你最终得到类似的东西之后

 public interface IMyInterface
    {
      String DoSomething();

    }

    class B:IMyInterface
    {
      public String DoSomething()
      {
        return "11111";

      }
    }


    class A{
    private IMyInterface b; 

    public A(IMyInterface b)
    {
      b = this.b;
    }

   public String DoSomething2()
    {
      return b.DoSomething();
    }

    }

在主要..

A a = new A(new B());
a.DoSomething2();

因此,您传递实现接口或抽象类的类而不是 b。所以真正的逻辑被注入并且可以很容易地替换。它在你的课之外!

于 2013-11-02T09:32:38.407 回答