私は次のものを持っています:
public interface IEntity
{
IEntityContent Data { get; set; }
}
public interface IEntityContent { }
public interface IThingService<T>
{
void DoThing(T item);
}
public class BaseEntity<T> : IEntity
where T : IEntityContent
{
public abstract T Data { get; set; }
}
public class FooEntity : BaseEntity<FooContent>
{
public override FooContent Data { get; set; }
}
public class FooContent : IEntityContent
{
// Some properties
}
public class ThingService<T> : IThingService<T>
where T : IEntity
{
public void DoThing(T item)
{
Serializer.Instance.Serialize(item.Content);
}
}
の署名Serializer.Instance.Serialize
は次のとおりです。
string Serialize<T>(T from)
しかし、私は次のようになります:
'BaseEntity<T>' はインターフェイス メンバー 'IEntity.Data' を実装していません。'BaseEntity<T>.Data' は 'IEntityContent' の一致する戻り値の型を持たないため、'IEntity.Data' を実装できません
どうしてこれなの?IThingService
現状では、私が見る限り、ジェネリックである必要がある異なる型引数を指定するためだけに、ほぼ同一の強く型付けされた実装の束を作成することを余儀なくされています.
これは何らかの形で共分散の欠如に関連していBaseEntity
ますか? どうすればThingService<T>
仕事をすることができますか?