Ogni volta che sovrascrivo un metodo di una classe base, diversa dalla mia implementazione di questo metodo, mi sembra di avere 3 scelte.Come "correttamente" sovrascrivere un metodo di classe base?
1) Chiamare base.Method() e quindi fornire la mia implementazione.
2) Fornire mia implementazione e quindi chiamare base.Method()
3) solo fornire la mia esecuzione.
Recentemente durante l'utilizzo di una libreria ho realizzato alcuni bug introdotti a causa dell'impossibilità di implementare il metodo come previsto dalla libreria. Non sono sicuro che ciò non funzioni su una parte della biblioteca o qualcosa di sbagliato nella mia comprensione.
Farò un esempio.
public class ViewManager {
public virtual void Customize(){
PrepareBaseView();
}
}
public class PostViewManager {
public override void Customize(){
base.Customize();
PreparePostView();
}
}
public class PreViewManager {
public override void Customize(){
PreparePreView();
base.Customize();
}
}
public class CustomViewManager {
public override void Customize(){
PrepareCustomView();
}
}
La mia domanda è che come potrebbe un sapere classe figlia (senza dare un'occhiata alla implementazione della classe base) quale ordine (o di opzione) che viene previsto per la classe padre? Esiste un modo in cui la classe genitore potrebbe imporre una delle tre alternative a tutte le classi derivate?
'PostViewManager',' PreViewManager', 'CustomViewManager' ereditano da' ViewManager'? Se è così, dovresti modificare il codice. – LaTeX