Скажем, у меня есть два класса, которые выглядят так:
public class ByteFilter
{
private Func <int, byte[]> readBytes;
private Action<byte[]> writeBytes;
public ByteFilter(Func <int, byte[]> readBytes, Action<byte[]> writeBytes)
{
this.readBytes = readBytes;
this.writeBytes = writeBytes;
}
}
public class PacketFilter
{
private Func<Packet> readPacket;
private Action<Packet> writePacket;
Public PacketFilter(Func<Packet> readPacket, Action<Packet> writePacket)
{
this.readBytes = readPacket;
this.writeBytes = writePacket;
}
}
Каждый класс может быть создан во время выполнения (через Activator.CreateInstance
) для выполнения функции фильтрации.Методы чтения и записи будут подключены во время выполнения к методам из других классов, которые будут предоставлять и принимать байтовые массивы или пакеты.
Внутри каждого фильтра есть дополнительный код, который выполняет функцию фильтрации:
public void Process()
{
while (!done)
{
byte[] data = ReadBytes(); // or ReadPacket()
// perform filtering on data
WriteBytes(data); // or WritePacket()
}
}
Если только одна из вышеуказанных сигнатур конструктора будет присутствовать в каждом фильтре, как определить (используя Reflection) какая сигнатура конструктора присутствует, чтобы я мог подключить соответствующие методы во время выполнения?
Примечание: если я глупый и делаю это неправильно, я бы тоже хотел это знать.