Ho una classe che è identica al 99% alla sua controparte. Il codice di esempio va sotto:
public abstract class BaseClass
{
void Method1() { }
void Method2() { }
void Method3() { }
public void MainMethod(List<Object1> listObject)
{
Method1();
Method2();
Method3();
Method4();
}
abstract internal void Method4();
}
public sealed class DerivedClass : BaseClass
{
internal override void Method4()
{
throw new NotImplementedException();
}
}
public class BaseClass2
{
void Method1() { }
void Method2() { }
void Method3() { }
public void MainMethod2(List<Object2> listObject)
{
Method1();
Method2();
Method3();
}
}
Come puoi vedere, BaseClass e BaseClass2 sono quasi identici a Metodo1 ... Metodo3. Esiste un'alternativa migliore che può essere utilizzata per minimizzare la duplicazione del codice.
Inizialmente ho iniziato questo polimorfismo come materiale incoraggiante, ho oltre 11 classi derivate su BaseClass e, a causa della seconda implementazione di MainMethod2, sono bloccato con la duplicazione del codice.
Non riesco a pensare a un modo intelligente per uscirne.
Aggiornamento: Quindi questa domanda potenzialmente contiene due parti:1. Come evitare la duplicazione del codice? Ho risolto questo problema usando la composizione con successo come suggerito dalle meravigliose risposte di seguito.
2. Come evitare astrazioni leaky ? Con questo sto ancora lottando ...