Tôi mới tham gia giao diện và lớp trừu tượng. Tôi muốn tạo một vài giao diện để xác định các phương thức và biến cốt lõi cho các đối tượng cho một hệ thống giỏ hàng. Sau đó, tôi muốn tạo ra các lớp trừu tượng mà thực hiện các chức năng cốt lõi. Ý tưởng là chúng có thể được sử dụng bởi các lớp khác theo những cách hơi khác nhau cho các dự án khác nhau.Làm cách nào để xác định loại trả về của một phương thức giao diện là một giao diện khác?
Dưới đây là (cắt xuống) của tôi giao diện:
public interface ICart
{
...
List<ICartItem> CartItems { get; set; }
}
public interface ICartItem
{
int ProductId { get; set; }
int Quantity { get; set; }
}
Và đây là lớp học của tôi trừu tượng giỏ hàng (một lần nữa, chỉ thấy dòng có liên quan) mà thực hiện ICart:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<CartItem> CartItems
{
get
{
return _cartItems;
}
}
}
Và CartItem của tôi lớp thực hiện ICartItem:
public abstract class CartItem : ICartItem
{
...
}
Khi tôi cố gắng biên dịch các lớp, tôi gặp lỗi aying: 'Giỏ hàng' không triển khai thành viên giao diện 'CartItems'. 'Cart.CartItems' không thể triển khai 'ICart.CartItems' vì nó không có kiểu trả về phù hợp của System.Collections.Generic.List <ICartItem>. Tôi nghĩ ý tưởng ở đây là giao diện có thể được thực hiện bởi một số lớp thực hiện các chức năng cốt lõi theo nhiều cách khác nhau và thêm các phương thức mới, v.v. Tại sao giao diện của tôi cần biết lớp nào đang được sử dụng , miễn là lớp đó thực sự thực hiện giao diện một cách chính xác?
Generics có sẵn như từ C# 2.0 :) –
Đây là một cách khá tốt để thực hiện điều này! – mquander
(cố định điều C# 2; hy vọng bạn không nhớ ...) –