在类C#的方法中包含代码

时间:2013-11-02 09:26:17

标签: c#

我已经花了几个小时坐在代码上,我什么都不想。累。

我有一个班级:

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:

中包含此内容
                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);

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

您不能包含外部文件,例如C ++。

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

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

答案 2 :(得分: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。 因此,真实的逻辑被注入并且可以很容易地被替换。它超出了你的班级!