gpt4 book ai didi

C#如何处理多种消息类型?

转载 作者:行者123 更新时间:2023-11-30 23:04:42 24 4
gpt4 key购买 nike

我正在编写一个 C# 套接字网络库。我正在定义一个 BaseMessage 类,我将从中派生所有消息类型(例如 UpdateNameMessage、UpdateStatusMessage)。

然后我将能够通过调用服务器的 SendMessage 方法来发送它们,该方法将接收 BaseMessage 消息。

但是,我希望每个 BaseMessage 还包含一个已定义的 MessageType 属性。我的问题来自如何使用“最佳实践”风格的方式标准化这些消息类型的编号?我目前有一个使用枚举的示例,但是,对于使用该库的人来说,他们无法从枚举继承来添加他们自己的消息类型。

我想到了using a class ,并定义常量。但这相当丑陋,不能作为答案。

我考虑过编写一个静态类,您可以在启动时向其注册您的消息类型。

MessageTypeDictionary.Add("Heartbeat");

但我不喜欢稍后由用户将 MessageType 编写为字符串来创建消息的方式,这不是最好的方式:

new BaseMessage("Alice", "Bob", "Heartbeat")

我当前的代码:

服务器会发送这样的消息:

public void SendMessage(BaseMessage message) {  }

BaseMessage 目前看起来像这样:

public class BaseMessage
{
public string To { get; protected set; }
public string From { get; protected set; }
public MessageType MessageType { get; protected set; }

public BaseMessage(string to, string from, MessageType messageType)
{
To = to;
From = from;
MessageType = messageType;
}
}

最后,MessageType 枚举看起来像这样

public enum MessageType
{
CONNECT,
DISCONNECT,
UPDATENAME
}

最佳答案

您有多种选择。这是一个基于继承的解决方案。

// Abstract base class
public abstract class BaseMessage
{
public string To { get; protected set; }
public string From { get; protected set; }
public abstract string MessageType { get; }

public BaseMessage(string to, string from)
{
To = to;
From = from;
}
}

// Concrete class for every message type.
public class HearthbeatMessage : BaseMessage
{
public override string MessageType
{
get
{
return "Hearthbeat";
}
}
}

关于C#如何处理多种消息类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49207386/

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