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

ActionまたはFuncを見てください。異なるパラメーターを持ついくつかのオーバーロードがあります。別の方法は、クラスを抽象化し、派生クラスで動作を定義することで問題を解決することです。

于 2013-11-02T09:34:23.867 に答える
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 に答える
0

たとえば、C++ のように外部ファイルを含めることはできません。

部分クラスと部分メソッドがありますが、コード セグメントを直接含めることはできません。コードを静的メソッドでラップし、適切な値をパラメーターとして渡すことができます。この属性を使用する[AggressiveInlining]と、コードがインライン化され、コード インクルードの効果が得られます。

あなたがやりたいことは、コピペだけでうまくいくと思います。

于 2013-11-02T09:30:04.833 に答える