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' は 'IEntityContent' の一致する戻り値の型を持たないため、'IEntity.Data' を実装できません

どうしてこれなの?IThingService現状では、私が見る限り、ジェネリックである必要がある異なる型引数を指定するためだけに、ほぼ同一の強く型付けされた実装の束を作成することを余儀なくされています.

これは何らかの形で共分散の欠如に関連していBaseEntityますか? どうすればThingService<T>仕事をすることができますか?

4

1 に答える 1

1

なぜ単に持っていないのですか:

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

インターフェイスの実装については、戻り値の型を含めてインターフェイスと一致する必要があります(反分散/共分散を宣言していないため)(したがって、エラーメッセージが表示されます)

于 2013-10-09T08:04:05.380 に答える