在接口中:指定实现的方法必须采用接口的子类型?

时间:2012-10-22 10:38:32

标签: c# inheritance interface

我希望有一个接口指定该接口的任何实现必须在其方法声明中使用特定接口的子类型:

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)'

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:5)

您需要使用您应该期望的值类型使您的界面具有通用性:

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

...

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

如果你不把它变成通用的,任何只知道界面的东西都不知道哪种模型是有效的。