gpt4 book ai didi

c# - 如何在 C# 中使用 SerialPort 和 NetworkStream 之间的公共(public)接口(interface)?

转载 作者:太空宇宙 更新时间:2023-11-03 23:38:43 24 4
gpt4 key购买 nike

我有一个 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),比如

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 必须显式实现该接口(interface),当然,它们不会。

我是泛型的新手,感觉有点卡壳。有没有办法做我想做的事,还是我应该硬着头皮实现我的方法两次?

最佳答案

这可能不是泛型的良好应用,但它适用于使用基类。 SerialPort有一个属性叫BaseStream,是一个Stream。 NetworkStream 也派生自流,因此您可以这样做:

private bool _TryReadChunk(Stream connection, int n_exp, out byte[] received)
{
...
}

然后传入SerialPort.BaseStream对象或 NetworkStream 对象,然后您可以使用标准 Stream.Read 方法以相同的方式读取数据。

关于c# - 如何在 C# 中使用 SerialPort 和 NetworkStream 之间的公共(public)接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29854131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com