私たちは、このようなジェネリック型パラメータの制約「由来」指定することができます。"どこから派生したものではない"という一般的な型制約がありますか?
class Bar<T> where T : IFooGenerator
が由来ませを指定する方法はありますか?
私のユースケース:私はそれぞれに同じ並列化コードで、並列化されているFooGenerator
Sの束を持っているが、我々は並列化され常ににそれらをしたくありません。
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>
を合法的にしたくありません。
補助的な質問として、「派生していない」制約が不可能な場合、これを設計する方が良いでしょうか? ParallelFooGenerator
は総称型であり、汎用引数を指定していないため、
'' ParallelFooGenerator'がジェネリック型であり、あなたが一般的な引数を指定しなかったので、ParallelFooGeneratorは 'まだ、できません。例えば、 'ParallelFooGenerator >'が可能です - 本当にそのような型を許すのでしょうか? –
cdhowie
いいえ、それは不可能です - 許可された制約:http://msdn.microsoft.com/en-us/library/d5x73970.aspx – Slugart
@cdhowie:うわー、ダルプ、そうです。まあ、それは私の問題を解決する:)しかし、問題はまだ他の人に役立つことができます! –