L'ereditarietà di una classe con metodi non utilizzati viola il principio di separazione dell'interfaccia?Principio di segregazione di ereditarietà e interfaccia
Ad esempio:
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
dipende dal metodo di Base.Receive(int n)
, ma non è mai lo usa.
UPD
Definizione io uso:
ISP dichiara che nessun cliente dovrebbe essere costretto a dipendere da metodi che non utilizza.
non sono sicuro che in questo esempio che non si usa, come sarebbe OnMsg mai essere chiamato se la ricezione non usato? – BlackICE
Nel mio caso l'unico modo per chiamare 'OnMsg' è da' Ricevi'. Ho bisogno di questa ereditarietà per proiettare i dati in arrivo ('int n') sull'interfaccia di' Concrete' che usa 'string msg'. Nell'esempio reale c'è un lavoro più complesso del semplice 'ToString()' – astef
@astef: come ha giustamente osservato Paulo, stai usando il 'modello di progettazione modello 'qui :) –