繁体   English   中英

如何在C#中使用SerialPort和NetworkStream之间的通用接口?

[英]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已经是StreamSerialPort.BaseStream公开了一个Stream 您可以将Stream作为TryReadChunk方法的参数并直接读取流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM