需要帮助设计实现tcp电报代码的类

时间:2017-08-14 07:51:06

标签: c# tcp protocols

我想实现一个用C#编写的“框架”,用于Windows窗体应用程序。

此框架旨在实现一些允许通过TCP / IP套接字发送和接收字节数组的基本方法,并将这些字节数组转换为实现不同TCP / IP报文的特定类,这些报表由头数据和有效负载组成数据。

我想过使用接口,一些抽象基类,并基于它们为不同的协议实现不同的实现。

我已经设计了接口,但是在该接口中我没有静态成员或构造函数声明的限制。

这是我的界面:

public interface ITcpTelegramm<T> where T : struct

基于此,我宣布了

using IUInt16TcpTelegramm  = ITcpTelegramm<UInt16>;
public abstract class TcpTelegramm : IUInt16TcpTelegramm

其中我将接口实现为抽象方法

public abstract IUInt16TcpTelegramm Analyse(byte[] daten);

因此,每个继承 TcpTelegramm 的类都必须声明这些方法的实现。

但是因为接口不能包含静态方法而静态方法不能是抽象的,所以我不能强制继承类将 Analyze 实现为静态:

public static IUInt16TcpTelegramm Analyse(byte[] daten)
{
    /* some code that analyses the byte array and creates an object
       that represents the TCP/IP telegram object in the array */
}

所以现在我被困了一点。 要么我放弃使用静态方法,要么使用抽象基类。

1 个答案:

答案 0 :(得分:1)

你是对的,你不能将static方法声明为abstract,并且让方法非 - static解决方法可能也不是一个好主意这个问题,因为它会造成糟糕的设计。

我实际上会采用略有不同的路线。您的static方法是工厂方法模式的实现。据我所知,你所有的课都会有这样的方法。为什么不创建一个实现包含所需工厂方法的接口的工厂类?

在我看来,这种解决方案会更优越,因为

  • 它将您的类的创建逻辑与其实现分开
  • 您可以更轻松地重复使用创建逻辑(可能是这种情况,因为您的对象似乎与之密切相关)

您可以详细了解工厂模式herehere