Средний C # программист здесь. Я пишу сетевую оболочку и хочу, чтобы каждый тип пакета мог определять свой собственный метод OpenPacket, который будет принимать параметр класса того же типа, что и текущий класс. Я также хочу другой метод 'WriteToPacket', который будет возвращать пакет того же типа, что и его текущий класс.
Например. WriteToPacket класса MessagePacket вернет MessagePacket. Я бы использовал наследование и просто возвращал тип пакета, но каждый пакет имеет разные переменные. Кроме того, я разрабатываю его как библиотеку, поэтому я хотел бы, чтобы новые типы пакетов могли быть определены за пределами DLL.
У меня есть интерфейс для типа пакета
public interface IPacket_Type<T> where T : class
{
T OpenPacketFromMessage(NetIncomingMessage msg) ;
NetOutgoingMessage PackPacketIntoMessage(NetOutgoingMessage msg, T packet);
}
Я использую это как часть пакета
public class TestPacket : Packet, IPacket_Type<TestPacket> {
public int testInt;
public TestPacket(string packet_name) : base(packet_name){}
public TestPacket OpenPacketFromMessage(NetIncomingMessage msg)
{
TestPacket packet = new TestPacket(packet_name);
packet.testInt = msg.ReadInt32();
return packet;
}
public NetOutgoingMessage PackPacketIntoMessage(NetOutgoingMessage msg, TestPacket packet)
{
msg.Write(packet_name);
msg.Write(packet.testInt);
return msg;
}
}
Получив имя класса на стороне сервера, я хотел бы иметь возможность создать такой класс. Например, создайте экземпляр TestPacket, а не один из пакета. Я подумал о том, чтобы сделать это, создав класс пакета, который возвращает его текущий тип, что позволяет мне использовать его как основу, всегда возвращая тип класса.
Любая помощь будет оценена, спасибо!