使用具体类实现接口方法

时间:2018-01-05 02:45:26

标签: c# interface

我有以下接口,一个用于实体,一个用于某些逻辑:

public interface IItem 
{ 
    int Id { get; set; }
}

public interface IGenerator
{
    IList<IItem> Generate();
}

和实施:

public class ItemA : IItem 
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ItemAGenerator : IGenerator
{
    public IList<ItemA> Generate()
    {
        // do stuff
        return List<ItemA>;
    }
}

该实现不起作用,它表示它没有匹配的返回类型,所以我也尝试过:

public class ItemAGenerator : IGenerator
{
    public IList<IItem> Generate()
    {
        // do stuff
        return List<ItemA>;
    }
}

它不起作用,它说:不能隐式地将类型List<IItem>转换为List<ItemA>

如何让它发挥作用?我在这里失踪了什么。

2 个答案:

答案 0 :(得分:2)

只需将列表创建为List<IItem>,但可以向其添加ItemA

public class ItemAGenerator : IGenerator
{
    public IList<IItem> Generate()
    {
        var list = new List<IItem>();
        list.Add(new ItemA());

        return list;
    }
}

答案 1 :(得分:1)

只需IGenerator通用。然后,您可以指定将返回的类型。

public interface IGenerator<T> where T : IItem
{
    IList<T> Generate();
}

public class ItemAGenerator : IGenerator<ItemA>
{
    public IList<ItemA> Generate()
    {
        // do stuff
        return List<ItemA>;
    }
}