Sự kế thừa từ một lớp với các phương thức không được sử dụng có vi phạm nguyên tắc phân tách giao diện không?Nguyên tắc phân tách quyền thừa kế và giao diện
Ví dụ:
abstract class Base
{
public void Receive(int n)
{
// . . . (some important work)
OnMsg(n.ToString());
}
protected abstract void OnMsg(string msg);
}
class Concrete : Base
{
protected override void OnMsg(string msg)
{
Console.WriteLine("Msg: " + msg);
}
}
Concrete
phụ thuộc vào phương pháp Base.Receive(int n)
, nhưng nó không bao giờ sử dụng nó.
UPD
Definition tôi sử dụng:
ISP khẳng định rằng không có khách hàng nên buộc phải phụ thuộc vào phương pháp nó không sử dụng.
Tôi không chắc chắn rằng trong ví dụ này không sử dụng nó, OnMsg sẽ được gọi như thế nào nếu Nhận là không được sử dụng? – BlackICE
Trong trường hợp của tôi, cách duy nhất để gọi 'OnMsg' là từ' Nhận'. Tôi cần thừa kế này để dự án dữ liệu đến ('int n') tới giao diện' Concrete' sử dụng 'chuỗi msg'. Trong ví dụ thực tế, có một số công việc phức tạp hơn là 'ToString()' – astef
@astef: Như Paulo đã chỉ ra, bạn đang sử dụng 'mẫu thiết kế mẫu' ở đây :) –