gpt4 book ai didi

c# - 对传入数据包进行高效的多类型检查

转载 作者:行者123 更新时间:2023-11-30 20:41:21 24 4
gpt4 key购买 nike

我有一个抽象的 Packet 类来定义我的网络应用程序中的基本数据包。一旦服务器或客户端收到一个数据包,我只得到 Packet 对象。我想使用 is 测试类型,但在我看来,当 is 测试成功时,转换是多余的。使用 as 也可以,但它需要为我要检查的每种类型使用一个变量。那不是低效的吗?如何有效地测试具有多种类型的对象?这是一个例子:

public void HandlePacket(Packet packet)
{
MessagePacket messagePacket = packet as MessagePacket;
PingPacket pingPacket = packet as PingPacket;

if (messagePacket != null)
{
//Handle message packet
}
else if (pingPacket != null)
{
//Handle ping packet
}
else if ...
}

最佳答案

double dispatch怎么样? ?

class Message {
public abstract void Dispatch(MessageHandler handler);
}

class PacketMessage: Message {
override void Dispatch(MessageHandler handler) {
handler.HandlePacket(this);
}
}

class PingMessage: Message {
override void Dispatch(MessageHandler handler) {
handler.HandlePing(this);
}
}


class MessageHandler {
void HandleMessage(Message message) {
message.Dispatch(this);
}

void HandlePacket(PacketMessage packet) {
...
}

void HandlePing(PingMessage ping) {
...
}
}

关于c# - 对传入数据包进行高效的多类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464707/

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