Soy nuevo en interfaces y clases abstractas. Quiero crear un par de interfaces para definir los principales métodos y variables para los objetos de un sistema de carrito de compras. Entonces quiero crear clases abstractas que implementen las funciones centrales. La idea es que puedan ser utilizados por otras clases de maneras ligeramente diferentes para diferentes proyectos.¿Cómo puedo definir el tipo de devolución de un método de interfaz para que sea otra interfaz?
Éstos son mis (corte hacia abajo) interfaces:
public interface ICart
{
...
List<ICartItem> CartItems { get; set; }
}
public interface ICartItem
{
int ProductId { get; set; }
int Quantity { get; set; }
}
Y aquí está mi clase abstracta de la compra (de nuevo, sólo muestra las líneas relevantes) que implementa Icart:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<CartItem> CartItems
{
get
{
return _cartItems;
}
}
}
Y mi CartItem clase que implementa ICartItem:
public abstract class CartItem : ICartItem
{
...
}
Cuando intento compilar las clases obtengo un error m aying: 'Cart' no implementa el miembro de interfaz 'CartItems'. 'Cart.CartItems' no puede implementar 'ICart.CartItems' porque no tiene el tipo de retorno coincidente de System.Collections.Generic.List <ICartItem>.
Pensé que la idea aquí es que la interfaz puede ser implementada por varias clases que realizan las funciones centrales de diferentes maneras y agregan nuevos métodos, etc. ¿Por qué mi interfaz necesitaría saber qué clase se está utilizando realmente? , siempre y cuando esa clase realmente implemente la interfaz correctamente?
genéricos están disponibles a partir de C# 2.0 :) –
Esta es una muy buena forma de implementar esto! – mquander
(arregló la cosa C# 2, espero que no te importe ...) –