Здравствуйте, я создал простой пакетный скелет, в котором каждый пакет представляет собой файл класса, который расширяет интерфейс, но, что бы это ни было важно, просто небольшое вступление, чтобы показать вам, как оно работает и что я пытаюсь сделать.
скажем, что-то вроде этого
public static void HandlePacket(Player player, Packet p)
{
PacketHandler handler = null;
if(handlers.TryGetValue(p.getId(), out handler)) {
handler.handlePacket(player, p);
} else {
Console.WriteLine("Unhandled packet: " + p + ".");
}
}
Но хорошо, приведенный выше код немного не связан с этим вопросом ... мой вопрос связан с наиболее эффективным заполнением обработчиков.
обработчики в значительной степени просто
private static Dictionary<int, PacketHandler> handlers = new Dictionary<int, PacketHandler>();
Теперь я не могу решить, каким образом заполнить карту обработчиков.
Первый путь, который уродлив, идет примерно так.
PacketHandler temp;
temp = new TalkPacket();
handlers.Add(33, temp);
handlers.Add(66, temp);
handlers.Add(22, temp);
handlers.Add(11, temp);
элегантный способ выглядит следующим образом.
handlers.Add(33, new TalkPacket());
handlers.Add(66, new TalkPacket());
handlers.Add(22, new TalkPacket());
handlers.Add(11, new TalkPacket());
Мой вопрос касается ссылок, зачем создавать больше объектов ... когда вы можете использовать их повторно.
Так что на самом деле я не уверен, что уродливый способ сделать только один экземпляр объекта TalkPacket или 4? как элегантный способ, если нет разницы с кодом выше. Тогда я мог бы пойти по элегантному пути.
В любом случае я включу не более 255 пакетов, поэтому 255 объектов имеют большое значение ... но большая часть пакетов будет использоваться совместно с другими кодами операций, поэтому я продолжаю думать, зачем инициировать больше экземпляров, когда они делают то же самое. 1023 *
Сначала я искал способ связать несколько типов данных int с одним объектом и иметь легкий доступ, например, команду TryGetValue .
В любом случае, если у кого-нибудь есть хорошие предложения, дайте мне знать. Спасибо.