possiamo specificare un "deriva da" vincolo sui parametri di tipo generico in questo modo:Esiste un vincolo di tipo generico per "dove NON viene derivato da"?
class Bar<T> where T : IFooGenerator
C'è un modo per specificare NON derivati da?
mio caso d'uso: Ho un sacco di FooGenerator
s che sono parallelizzabile, con lo stesso codice di parallelizzazione per ciascuno, ma non li voglio sempre essere parallelizzati.
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
Così, ho creare una classe contenitore generico per la generazione di Foo in parallelo:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
Dal momento che voglio FooGenerator
e ParallelFooGenerator<FooGenerator>
ad essere intercambiabili, faccio ParallelFooGenerator : IFooGenerator
. Tuttavia, chiaramente non voglio che lo ParallelFooGenerator<ParallelFooGenerator>
sia legale.
Quindi, come domanda ausiliaria, c'è forse un modo migliore per progettare questo se i vincoli "non derivati da" sono impossibili?
'ParallelFooGenerator' già non è possibile, perché 'ParallelFooGenerator' è un tipo generico e non è stato specificato un argomento generico. Ad esempio, 'ParallelFooGenerator >' è possibile - e permetterebbe ad un tipo simile di essere così male? –
cdhowie
No non è possibile - restrizioni consentite: http://msdn.microsoft.com/en-us/library/d5x73970.aspx – Slugart
@cdhowie: Wow, derp, hai ragione. Bene, questo risolve il mio problema :) Ma la domanda potrebbe ancora essere utile per gli altri! –