Możemy określić „pochodzi od” ograniczenia na parametry typu rodzajowego jak ten:Czy istnieje ogólne ograniczenie typu dla "skąd NIE pochodzi od"?
class Bar<T> where T : IFooGenerator
Czy istnieje sposób, aby określić NIE pochodzi od?
My use-case: Mam kilka FooGenerator
s, które są parallelizable, z tym samym kodem Zrównoleglanie dla każdego, ale nie chcemy ich do zawsze być parallelized.
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
Zatem utworzyć rodzajowe klasy kontenera do generowania Foo równolegle:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
Ponieważ chcę FooGenerator
i ParallelFooGenerator<FooGenerator>
być stosowane zamiennie, robię ParallelFooGenerator : IFooGenerator
. Jednak wyraźnie nie chcę, aby ParallelFooGenerator<ParallelFooGenerator>
było legalne.
Tak więc, jako pytanie pomocnicze, istnieje prawdopodobnie lepszy sposób zaprojektowania tego, jeśli ograniczenia "nie pochodzą od" są niemożliwe?
'ParallelFooGenerator' już nie jest możliwe, ponieważ 'ParallelFooGenerator' to typ rodzajowy i nie określił ogólny argument. Na przykład, 'ParallelFooGenerator >' jest możliwy - i czy pozwolenie na taki typ naprawdę byłoby takie złe? –
cdhowie
Nie jest to niemożliwe - dozwolone ograniczenia: http://msdn.microsoft.com/en-us/library/d5x73970.aspx – Slugart
@cdhowie: Wow, derp, masz rację. Cóż, to rozwiązuje mój problem :) Ale pytanie może być przydatne innym! –