Ich bin neu in Interfaces und abstrakten Klassen. Ich möchte ein paar Schnittstellen erstellen, um Kernmethoden und Variablen für die Objekte eines Einkaufswagensystems zu definieren. Dann möchte ich abstrakte Klassen erstellen, die die Kernfunktionen implementieren. Die Idee ist, dass sie von anderen Klassen auf unterschiedliche Weise für verschiedene Projekte verwendet werden können.Wie definiere ich den Rückgabetyp einer Interface-Methode als eine andere Schnittstelle?
Hier sind meine (abgespeckte) Schnittstellen:
public interface ICart
{
...
List<ICartItem> CartItems { get; set; }
}
public interface ICartItem
{
int ProductId { get; set; }
int Quantity { get; set; }
}
Und hier ist meine abstrakte Wagen-Klasse (auch hier nur relevante Linien), die ICART implementiert:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<CartItem> CartItems
{
get
{
return _cartItems;
}
}
}
Und mein CartItem Klasse welche implementiert ICartItem:
public abstract class CartItem : ICartItem
{
...
}
Wenn ich versuche, die Klassen zu kompilieren, erhalte ich einen Fehler s aying: 'Cart' implementiert kein Interface-Element 'CartItems'. 'Cart.CartItems' kann 'ICart.CartItems' nicht implementieren, da es nicht den passenden Rückgabetyp von System.Collections.Generic.List <ICartItem> aufweist.
Ich dachte, dass die Idee hier ist, dass die Schnittstelle von einer Reihe von Klassen implementiert werden kann, die die Kernfunktionen auf verschiedene Arten durchführen und neue Methoden hinzufügen usw. Warum sollte meine Schnittstelle wissen, welche Klasse tatsächlich verwendet wird , solange diese Klasse die Schnittstelle tatsächlich korrekt implementiert?
Generika sind als von C# 2.0 :) –
Dies ist ein ziemlich guter Weg, dies zu realisieren! – mquander
(das C# 2-Ding repariert; hoffe, es stört dich nicht ...) –