Представьте себе код C #, подобный этому
ISomeInterface someVar = creator.Create(typeof(SomeClass),
typeof(ISomeInterface));
Что должно произойти?Метод creator.Create принимает два параметра: первый - это тип создаваемого объекта, второй - тип, к которому метод должен привести вновь созданный объект и вернуть как этот тип.
Итак, как в примере кода:мы хотим использовать интерфейс, мы знаем реализации классов, поэтому мы просим создать объект и указываем, что возвращаемый тип должен быть тем интерфейсом, который нас интересует.
Возможно ли вообще его реализовать?Дженерики, рефлексия, создание динамических методов на основе сложной декларации дженериков?что-то более сложное?Я открыт для предложений.
Конечно, мы не принимаем во внимание самое простое решение, которое явно приводит возвращаемое значение к ISomeInterface.Метод должен возвращать созданный объект в качестве интерфейса, о котором мы просили.
Если вам интересно, зачем он мне нужен, я пытаюсь усложнить свой рабочий код в тщетном поиске какого-то умного способа упростить мою фабрику классов:)
РЕДАКТИРОВАТЬ :
Текущий универсальный метод Create:
public T Create<T>(Type type)
{
return (T)Activator.CreateInstance(type);
}
Но это не то, что я хочу, это предоставить два типа и в основном создать объектсначала, но вернись вторым.Это не тот случай, когда у меня есть метод Create для разных интерфейсов, реализованный в моей кодовой базе.
Дальнейший пример использования:
IFoo f = Create(typeof(Foo), typeof(IFoo));
IBar b = Create(typeof(Bar), typeof(IBar));
Итак, как вы видите, метод каждый раз возвращает разные интерфейсысогласно типу, указанному во втором параметре.И нет никакого способа использовать ограничения типа, или я не вижу, как это сделать.