0

私はこれを持っています:

public class ClientSession : TcpClient
{
    public int SessionGUID = 0;
}

そして、サーバースレッドのどこかでこれ:

ClientSession client = (ClientSession)tcpListener.AcceptTcpClient(); //cast failure

わかりました、そのようにキャストするには、右側のオブジェクトが ClientSession のインスタンス (基本クラスへのポインターに格納されている可能性があります) でなければならないことを理解していますが、その場合に ClientSession を構築する方法は?

私は ClientSession を次のようにしたくありません:

public class ClientSession
{
    public int SessionGUID = 0;
    public TcpClient client;
}
4

2 に答える 2

0

TcpListener.AcceptTcpClientTcpClientオブジェクトのみを返します。オブジェクトの型は実行時に変更できないため、(オブジェクトの ID とデータを保持する) 直接変換はできません。

構成(最後のコードスニペットと同様)が最良のアプローチだと思います。TcpClientカスタム変換演算子を実装することにより、キャスト構文を使用して変換を有効にすることができますが、ここで受け取るコンストラクターを使用することをお勧めします。

public ClientSession(TcpClient client) { /* ... */ }

だからあなたはこれを行うことができます:

ClientSession client = new ClientSession(tcpListener.AcceptTcpClient());
于 2012-06-26T10:28:26.537 に答える
0

すべてClientSessionが typeですが、すべてがtypeTcpClientであるとは限りません。は のオブジェクトを返します。としては使用できません。または、次のようにクラスを微調整することもできます。TcpClientClientSessiontcpListener.AcceptTcpClient()TcpClientClientSession

class ClientSession
{
    public ClientSession(TcpClient client) 
    {
        this.client = client;
    }
    public TcpClient client {get; set;}
    // your stuff here...
}
于 2012-06-26T10:29:30.310 に答える