Мы можем указать ограничение "производное от" на параметры типового типа, например:
class Bar<T> where T : IFooGenerator
Есть ли способ указать NOT, полученный из?
Мой прецедент: у меня есть связка FooGenerator
, которые являются параллелизуемыми, с одинаковым кодом распараллеливания для каждого, но мы не хотим, чтобы они всегда были распараллелены.
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
Таким образом, я создаю общий контейнерный класс для генерации Foo параллельно:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
Поскольку я хочу, чтобы FooGenerator
и ParallelFooGenerator<FooGenerator>
были взаимозаменяемыми, я делаю ParallelFooGenerator : IFooGenerator
. Тем не менее, я явно не хочу, чтобы ParallelFooGenerator<ParallelFooGenerator>
был законным.
Итак, как вспомогательный вопрос, может быть, лучший способ его разработки, если невозможны "не производные от" ограничений?