사용되지 않는 메소드가있는 클래스의 상속이 인터페이스 분리 원칙을 위반합니까? 예를 들어상속 및 인터페이스 분리 원칙
:
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
는 방법 Base.Receive(int n)
에 따라 달라집니다,하지만 결코 그것을 사용하지 않습니다.
UPD
정의는 내가 사용
ISP는 어떤 클라이언트가 사용하지 않는 방법에 따라 강제되지 않는다는 것을 말한다.
내가이 예에서는 그것을 사용하지 않는 것을 확실하지 않다 요구할 수 있습니다 사용하지 않습니까? – BlackICE
제 경우에는'OnMsg'를 호출하는 유일한 방법은'Receive'입니다. 들어오는 데이터 (int n)를'string msg '을 사용하는'Concrete' 인터페이스로 투영하려면이 상속이 필요합니다. 실제 예제에서 단지 ToString()보다 더 복잡한 작업이 있습니다 – astef
@astef : Paulo가 올바르게 지적 했으니 여기'템플릿 디자인 패턴 '을 사용하고 있습니다 :) –