Jestem nowy w interfejsach i klasach abstrakcyjnych. Chcę utworzyć kilka interfejsów do definiowania podstawowych metod i zmiennych dla obiektów dla systemu koszyka na zakupy. Następnie chcę utworzyć klasy abstrakcyjne, które implementują podstawowe funkcje. Chodzi o to, że mogą być używane przez inne klasy w nieco inny sposób dla różnych projektów.Jak zdefiniować typ powrotu dla metody interfejsu jako innego interfejsu?
Oto moje (cut-dół) Interfejsy:
public interface ICart
{
...
List<ICartItem> CartItems { get; set; }
}
public interface ICartItem
{
int ProductId { get; set; }
int Quantity { get; set; }
}
A oto moja klasa abstrakcyjna Koszyk (ponownie, tylko pokazywanie odpowiednich linii), która implementuje Icart:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<CartItem> CartItems
{
get
{
return _cartItems;
}
}
}
i mój CartItem klasa implementująca ICartItem:
public abstract class CartItem : ICartItem
{
...
}
Kiedy próbuję skompilować klasy, pojawia się błąd s aying: "Koszyk" nie implementuje członka interfejsu "CartItems". "Cart.CartItems" nie może zaimplementować "ICart.CartItems", ponieważ nie ma zgodnego typu zwrotu System.Collections.Generic.List <ICartItem>.
Pomyślałem, że pomysł jest taki, że interfejs może być implementowany przez wiele klas, które wykonują podstawowe funkcje na różne sposoby i dodają nowe metody, itp. Dlaczego mój interfejs musiałby wiedzieć, która klasa jest faktycznie używana , tak długo jak ta klasa poprawnie implementuje interfejs?
generyczne są dostępne od C# 2.0 :) –
To bardzo dobry sposób, aby wdrożyć to! – mquander
(poprawiono C# 2, mam nadzieję, że nie masz nic przeciwko ...) –