は、次のクラスを考えてみましょう:私はクラスであることをTBase
ジェネリッククラスの引数を制限してきたクラスとメソッドレベルの汎用タイプの制約の相互作用
public class DerivedClassPool<TBase> where TBase : class
{
public TBase Get(Type componentType)
{
// Not important, but you get the idea
return Activator.CreateInstance(componentType) as TBase;
}
public TDerived SomeMethod<TDerived>() where TDerived : TBase
{
return Get(typeof(TBase)) as TDerived;
}
}
注:where TBase : class
私はまた、一般的なTDerived
を制限してきましたメソッドの引数はTBase
かそれに由来するもの:where TDerived : TBase
です。
私はas TDerived
ライン上のエラーを取得:それはクラス型制約も「クラスの制約
型パラメータが「TDerived」演算子「と」で使用することはできません
私は、制約class
を追加する必要があり、エラーを防ぐために、それを理解ので、私は取得したい:
where TDerived : class, TBase
TBase
が既にクラスに制限されていて、TDerived
がTBase
に拘束されているか、またはそれから派生している場合、なぜこれを行う必要がありますか?
http://stackoverflow.com/questions/8002148/c-sharp-generics-contraints-propagationを参照してください。エリックはそこにそれを置く。 –
@Jason、私はそれが「but」と読む方が良いと思います。 – Joey
@ジョー:十分に公正。私は、文章を始めるために結合詞を使うことは最近正しいと考えられていますが、文章が 'しかし'で始まるときは嫌です。私は高校英語の先生を責めます。彼は古典的な英国の慣例に従いました。 –