Sono nuovo alle interfacce e alle classi astratte. Voglio creare un paio di interfacce per definire i metodi e le variabili fondamentali per gli oggetti per un sistema di carrello della spesa. Quindi voglio creare classi astratte che implementino le funzioni principali. L'idea è che possano essere utilizzati da altre classi in modi leggermente diversi per i diversi progetti.Come definire il tipo di restituzione di un metodo di interfaccia come un'altra interfaccia?
Qui sono le mie (cut-down) interfacce:
public interface ICart
{
...
List<ICartItem> CartItems { get; set; }
}
public interface ICartItem
{
int ProductId { get; set; }
int Quantity { get; set; }
}
Ed ecco la mia classe astratta Carrello (di nuovo, mostrando solo le linee interessate) che implementa Icart:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<CartItem> CartItems
{
get
{
return _cartItems;
}
}
}
E il mio CartItem classe che implementa ICartItem:
public abstract class CartItem : ICartItem
{
...
}
Quando provo a compilare le classi ottengo un errore s Aying: 'Carrello' non implementa il membro dell'interfaccia 'CartItems'. 'Cart.CartItems' non può implementare 'ICart.CartItems' perché non ha il tipo di restituzione corrispondente di System.Collections.Generic.List <ICartItem>.
Ho pensato che l'idea qui è che l'interfaccia può essere implementata da un certo numero di classi che eseguono le funzioni principali in modi diversi e aggiungono nuovi metodi, ecc. Perché la mia interfaccia deve sapere quale classe viene effettivamente utilizzata , purché quella classe implementa correttamente l'interfaccia?
farmaci generici sono disponibili come da C# 2.0 :) –
Questo è un buon modo per implementare questo! – mquander
(corretta la cosa C# 2, spero non ti dispiaccia ...) –