Я новичок в интерфейсах и абстрактных классах. Я хочу создать пару интерфейсов для определения основных методов и переменных для объектов для системы корзины покупок. Затем я хочу создать абстрактные классы, которые реализуют основные функции. Идея состоит в том, что они могут использоваться другими классами несколько разными способами для разных проектов.
Вот мои (вырезанные) интерфейсы:
public interface ICart
{
...
List<ICartItem> CartItems { get; set; }
}
public interface ICartItem
{
int ProductId { get; set; }
int Quantity { get; set; }
}
И вот мой абстрактный класс Cart (опять же, только показывающий соответствующие строки), который реализует ICart:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<CartItem> CartItems
{
get
{
return _cartItems;
}
}
}
И мой класс CartItem, который реализует ICartItem:
public abstract class CartItem : ICartItem
{
...
}
Когда я пытаюсь скомпилировать классы, я получаю сообщение об ошибке: "Корзина" не реализует интерфейс "CartItems". "Cart.CartItems" не может реализовать "ICart.CartItems", потому что у него нет соответствующего типа возврата System.Collections.Generic.List <ICartItem> .
Я думал, что идея здесь заключается в том, что интерфейс может быть реализован рядом классов, которые выполняют основные функции по-разному и добавляют новые методы и т.д. Почему мой интерфейс должен знать, какой класс фактически используется, до тех пор, пока этот класс действительно реализует интерфейс правильно?