[英]NetworkStream, is there something similar to DataReceived for a SerialPort? (C#)
[英]How to use a common interface between SerialPort and NetworkStream in C#?
我有一个C#方法_TryReadChunk从SerialPort连接读取字节:
private bool _TryReadChunk(SerialPort connection, int n_exp, out byte[] received)
{
...
received = new byte[n_exp];
int bytes_read = connection.Read(received, length, n_exp);
...
}
我需要再次使用相同的方法,但是从NetworkStream中读取。 我认为这样做的一种优雅方式是使用类似的泛型方法
private bool _TryReadChunk<T> (T connection, int n_exp, out byte[] received)
{
...
}
但是,我不知何故需要在T必须实现Read方法的方法中添加约束。 首先我想要定义一个类似的界面
interface _CanRead
{
int Read(byte[] buffer, int offset, int count);
}
并要求
private bool _TryReadChunk<T> (T connection, int n_exp, out byte[] received) where T : _CanRead
{
...
}
但是当阅读更多时,我得到的印象是SerialPort和NetworkStream必须明确地实现该接口,当然,他们没有。
我是仿制药的新手,感觉有点卡住了。 有没有办法做我想要的或者我应该咬紧牙关并实施我的方法两次?
这可能不是一个很好的泛型应用程序,但它适用于使用基类。 SerialPort有一个名为BaseStream的属性,它是一个Stream。 NetworkStream也派生自流,所以你可以这样做:
private bool _TryReadChunk(Stream connection, int n_exp, out byte[] received)
{
...
}
然后传入SerialPort.BaseStream对象或NetworkStream对象,然后可以使用标准的Stream.Read方法以相同的方式读取数据。
您不必重新实施已经可用的功能。 您可以使用SerialPort.BaseStream
属性并直接使用它。
NetworkStream
已经是Stream
, SerialPort.BaseStream
公开了一个Stream
。 您可以将Stream
作为TryReadChunk
方法的参数并直接读取流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.