私は、特定の型を提供するサブクラスを持つgenericsクラスを持っています。ジェネリッククラスを特定の型付きクラスでサブクラス化できますか?
public abstract class GenericBase<T>
where T:Interface1
{
}
I特定の実装でジェネリックサブクラス:
public class Customer:
GenericBase<Type1>
(Type1
実装Interface1
)。
私はこれへの参照を持つ別の抽象基本クラスを持っている:私は、基本クラスのインスタンスにgenericInstanceを割り当てるしようとすると
protected GenericBase<Interface1> genericInstance;
は最後に、それはそれを言って、私のコンパイラエラーを与えます暗黙的に顧客をGenericBase <Interface1>に変換することはできません。
base.genericInstance = new Customer(); //Compiler error
Customer
がGenericBase<Type1>
のサブタイプである、とType1
はInterface1
を実装する場合、私はこのエラーを取得する理由私は理解していません。 GenericBase<Type1>
のサブクラスの場合Customer
は実質的にGenericBase<Interface1>
のタイプではありませんか?
ここでジェネリックについて何か誤解していると思います。この動作を許可する方法はありますか?
C#についてはわかりませんが、これはJavaではうまくいきません。 Javaでは、 'genericInstance'は' protected GenericBase <? 'として宣言されなければなりません。 extends Interface1> genericInstance'(注:実際に動作しているかどうかは試していません)。 – Powerlord
[共分散とContravariance](https://msdn.microsoft.com/en-us/library/ee207183) –
大雑把に言って、ジェネリックスは共変ではない。 'List'を 'List 'に代入することはできません。そうでないと 'List 'に 'Dog'を追加することができます。本当に' List ' –
Powerlord