Это в основном проблема дизайна.Как справиться с ограничениями ковариации?
Моя классовая структура выглядит следующим образом:
Interface IA
interface IB<T> where T : IA
abstract class AC<T> : IB<T>
class D : IA
class E : IA
class F : AC<D>
class G : AC<E>
Теперь у меня есть метод в сети переменного тока, подпись которого:
void foo(IB<IA> param)
И я хочу, чтобы вызвать его из F, как это:
foo(new G())
Я знаю об ограничении ковариации и контравариантности, и я знаю, что язык этого не позволяет. Кроме того, я не могу установить IB<out T>
.
Мой вопрос в том, как правильно обращаться с такой ситуацией по дизайну?
Можете ли вы указать, почему вы не можете установить 'IB'? –
(я подозреваю, что это дублированный вопрос, кстати, но трудно понять, как я его искал ...) –
@MatthewWatson В соответствии с ограничениями ковариации я не могу установить либо при использовании T в случае ограничения или используется как параметр для метода. https://msdn.microsoft.com/en-us/library/dd997386(v=vs.100).aspx –
Elliko