我有以下内容:
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&LT; T&GT;'没有实现接口成员'IEntity.Data'。 'BaseEntity&lt; T&gt; .Data'无法实现'IEntity.Data',因为它没有匹配的返回类型'IEntityContent'
这是为什么?就目前而言,我被迫创建了一堆几乎相同的强类型的IThingService
实现 - 这是一个重复的重复 - 只是为了指定不同的类型参数,据我所知,应该是通用的。
这是否与BaseEntity
中缺乏协方差有关?如何让ThingService<T>
工作?
答案 0 :(得分:1)
为什么不简单地拥有:
public interface IEntity<T>
{
T Data { get; set; }
}
对于接口的实现必须匹配接口(因为您没有声明任何反对/协方差),包括返回类型(因此您的错误消息)