我有一个派生自TcpClient的类,例如
class ZClient : TcpClient
{
public byte[] Buffer { get; set; }
public Queue<byte[]> Queue {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
以及创建TcpClient的方法
...
TcpListener listener = ar.AsyncState as TcpListener;
ZClient client = listener.EndAcceptTcpClient(ar) as ZClient;
Run Code Online (Sandbox Code Playgroud)
当我将通常返回TcpClient的listener.EndAcceptTcpClient(ar)转换为ZClient时,对象'client'为null.我试图做的是非法的吗?
更新:是否可以将ZClient的基类的属性设置为等于通过构造函数传入的TcpClient,以避免必须有一个额外的属性来引用TcpClient?例如
public ZClient(TcpClient client)
{
base = client; // I'm aware this doesn't work.
}
Run Code Online (Sandbox Code Playgroud)
因为它是倒退的.TcpClient不包含Buffer或Queue,因为它不是ZClient.苹果是水果,但不是所有水果都是苹果.
你需要某种显式转换.您可以提供一个接受TcpClient的ZClient构造函数,或者在TcpClient上提供返回ZClient的扩展方法.这些中的任何一个都可能需要使ZClient成为TcpClient的包装类,而不是ZClient的子类.