podemos especificar un "derivado de" restricción sobre los parámetros de tipo genérico como esto:¿Existe una restricción de tipo genérica para "where NOT derived from"?
class Bar<T> where T : IFooGenerator
¿Hay una manera de especificar NO derivan de?
Mi caso de uso: Tengo un montón de FooGenerator
s que son paralelizable, con el mismo código de paralelización para cada uno, pero no quiero que siempre ser parallelized.
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
Por lo tanto, puedo crear una clase de contenedor genérico para generar Foo en paralelo:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
Ya que quiero FooGenerator
y ParallelFooGenerator<FooGenerator>
ser intercambiables, hago ParallelFooGenerator : IFooGenerator
. Sin embargo, claramente no quiero que ParallelFooGenerator<ParallelFooGenerator>
sea legal.
Entonces, como pregunta auxiliar, ¿hay quizás una mejor manera de diseñar esto si las restricciones "no derivadas de" son imposibles?
'ParallelFooGenerator' ya no es posible, porque 'ParallelFooGenerator' es un tipo genérico y no se ha especificado un argumento genérico. Por ejemplo, 'ParallelFooGenerator >' es posible, ¿y permitir que ese tipo realmente sea tan malo? –
cdhowie
No, no es posible, restricciones permitidas: http://msdn.microsoft.com/en-us/library/d5x73970.aspx – Slugart
@cdhowie: Wow, derp, tienes razón. Bueno, eso resuelve mi problema :) ¡Pero la pregunta aún podría ser útil para otros! –