【发布时间】:2018-01-22 00:19:12
【问题描述】:
我想实现一个用 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 的类都必须声明这些方法的实现。
但是因为接口不能包含静态方法并且静态方法不能是抽象的,所以我不能强制继承的类将 Analyse 实现为静态:
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 */
}
所以现在我有点卡住了。 我要么放弃使用静态方法,要么放弃使用抽象基类。
【问题讨论】:
-
你说的是电报信使吗? core.telegram.org/api
-
为什么
Analyse()必须是静态的?你的问题是什么?您已经知道接口不能包含静态成员,所以您肯定不会问如何做到这一点。那么你问的是什么是?您有什么问题足够具体,可以避免接受许多不同的可能答案? -
Analyse()方法实现了工厂模式。所以我决定,它必须是静态的。 :-) 不,它不是电报信使。它应该是我的应用程序的测试应用程序,它使用不同的专有 TCP/IP 通信协议。