0

そのインターフェイスのすべての実装がメソッド宣言で特定のインターフェイスのサブタイプを使用する必要があることをインターフェイスに指定させたいと思います。

interface IModel {} // The original type

interface IMapper {
    void Create(IModel model); // The interface method
}

したがって、このインターフェイスの実装では、IModelそれ自体ではなく、次のサブタイプを期待する必要がありIModelます。

public class Customer : IModel {} // My subtype

public class CustomerMapper : IMapper {
    public void Create(Customer customer) {} // Implementation using the subtype
}

現時点では、次のエラーが発生しています。

「CustomerMapper」はインターフェイス メンバー「IMapper.Create(IModel)」を実装していません

これを達成する方法はありますか?

4

1 に答える 1

5

インターフェイスが期待する値のタイプでジェネリックにする必要があります。

interface IMapper<T> where T : IModel
{
    void Create(T model);
}

...

public class CustomerMapper : IMapper<Customer>
{
    public void Create(Customer model) {}
}

汎用化しないと、インターフェースしか知らないものは、どのようなモデルが有効なのかを知ることができません。

于 2012-10-22T10:40:11.727 に答える