0

我有以下内容:

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”无法实现“IEntity.Data”,因为它没有匹配的返回类型“IEntityContent”

为什么是这样?就目前而言,我被迫创建一堆几乎相同的强类型实现IThingService——这是一种重复的卸载——只是为了指定不同的类型参数,据我所知,它们应该是通用的。

这是否与缺乏协方差有关BaseEntity?我怎样才能ThingService<T>工作?

4

1 回答 1

1

为什么不简单地拥有:

public interface IEntity<T>
{
    T Data { get; set; }
}

对于接口的实现必须匹配接口(因为您没有声明任何反/协方差),包括返回类型(因此您的错误消息)

于 2013-10-09T08:04:05.380 回答