Entity Framework 4 を使用してエンティティとして実装するいくつかのインターフェイスを指定しました。
public class ConcreteContainer : IContainer
{
public EntityCollection<ConcreteChild> Children { get; set; }
}
public class ConcreteChild : IChild
{
}
public interface IContainer
{
IEnumerable<IChild> Children { get; set; }
}
public interface IChild
{
}
上記から次のコンパイラ エラーが表示されます。
「Demo.ConcreteContainer」はインターフェイス メンバー「Demo.IContainer.Children」を実装していません。「Demo.ConcreteContainer.Children」は「Demo.IContainer.Children」を実装できません。「System.Collections.Generic.IEnumerable」の一致する戻り値の型がないためです。
私の現在の理解では、これはIEnumerable(EntityCollectionによって実装されています)が共変ですが、おそらく反変ではないためです。
この型パラメーターは共変です。つまり、指定した型またはより派生した型のいずれかを使用できます。共分散と反分散の詳細については、ジェネリックにおける共分散と反分散を参照してください。
私は正しいですか、もしそうなら、IContainer
具象クラスを使用するのではなく、純粋に他のインターフェースに関してインターフェースを指定するという私の目標を達成する方法はありますか?
それとも、もっと根本的なことを誤解していますか?