如何将接口方法的返回类型定义为另一个接口?

Dav*_*isk 12 c# interface

我是接口和抽象类的新手.我想创建几个接口来定义购物车系统对象的核心方法和变量.然后我想创建实现核心功能的抽象类.这个想法是,其他类可以以不同的方式用于不同的项目.

这是我的(简化)界面:

public interface ICart
{
    ...
    List<ICartItem> CartItems { get; set; }
}

public interface ICartItem
{
    int ProductId { get; set; }
    int Quantity { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我的抽象Cart类(再次,只显示相关的行)实现ICart:

public abstract class Cart : ICart
{

    private List<CartItem> _cartItems = new List<CartItem>();

    public List<CartItem> CartItems 
    {
        get
        {
            return _cartItems;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的CartItem类实现了ICartItem:

public abstract class CartItem : ICartItem
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译类时,我得到一个错误说:'Cart'没有实现接口成员'CartItems'.'Cart.CartItems'无法实现'ICart.CartItems',因为它没有匹配的返回类型System.Collections.Generic.List <ICartItem>.

我认为这里的想法是接口可以由许多类实现,这些类以不同的方式执行核心功能并添加新方法等.为什么我的接口需要知道实际使用的是什么类,同样长因为该类实际上正确地实现了接口?

Tam*_*ege 20

您需要在C#2中使用泛型来实现:

public interface ICart<T> where T : ICartItem
{
    // ...
    List<T> CartItems { get; set; }
}

public abstract class Cart : ICart<CartItem>
{
    // ...
    public List<CartItem> CartItems { get; set; }
}
Run Code Online (Sandbox Code Playgroud)