- У меня есть общий интерфейс, который требует метода чтения и ключа. Я хочу использовать отражение, чтобы получить экземпляр каждой реализации.
- Как только у меня есть реализация, я хочу получить ее ключ и сохранить ключ и экземпляр в словаре.
- В конце концов, у меня будет метод, в котором я передам ключ и байт [], он будет искать ключ в словаре и использовать экземпляр, который он извлекает для чтения байта [], и возвращает
object
. - Надеюсь, это понятно, если нет, я могу ответить на вопросы в комментариях.
- В этом примере есть только int и string, но в моей реальной реализации у меня будет много других типов.
ЦельКак использовать отражение для получения реализаций общего интерфейса
Чтобы иметь словарь с 2 записей, хранящихся в качестве таковых:
- 43,
IRead<int> new Reader()
- 61,
IRead<string> new Reader()
public interface IRead<T>
{
T Read(bool[] binary);
int Key(T type);
}
public class Reader : IRead<int>, IRead<string>
{
int IRead<int>.Read(byte[] binary)
{
// does stuff
returns 4;
}
public int Key(int type) { return 43; }
string IRead<string>.Read(byte[] binary)
{
// does stuff
returns "example";
}
public int Key(string type) { return 61; }
static StreamProcessor()
{
// Here I want to get the definitions
}
}
Вы не можете определить на основе интерфейса 'IRead', что реализация будет иметь конструктор без параметров. Итак, как вы знаете, что сможете создать экземпляр каждого типа, который вы найдете? –
@ScottHannen Я просто хочу, чтобы Reader читал тип, определенный в словаре – JacobVoller
Похоже, вы ищете какую-то реализацию контейнера IoC. Посмотрите на [this] (http://stackoverflow.com/questions/28509317/get-all-types-that-implement-an-interface-in-unity) вопрос и предлагаемые ответы. –