Se supponiamo che non sia desiderabile che la classe base sia una pura classe di interfaccia e che usi i 2 esempi dal basso, che è un approccio migliore, usando la definizione della classe del metodo astratto o virtuale?
-
Il vantaggio della versione "astratta" è che probabilmente sembra più pulito e costringe la classe derivata a dare un'implementazione che si spera significativa.
-
Il vantaggio della versione "virtuale" è che può essere facilmente richiamato da altri moduli e utilizzato per i test senza aggiungere una serie di framework sottostanti come richiede la versione astratta.
Versione astratta:
public abstract class AbstractVersion
{
public abstract ReturnType Method1();
public abstract ReturnType Method2();
.
.
public abstract ReturnType MethodN();
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}
Versione virtuale:
public class VirtualVersion
{
public virtual ReturnType Method1()
{
return ReturnType.NotImplemented;
}
public virtual ReturnType Method2()
{
return ReturnType.NotImplemented;
}
.
.
public virtual ReturnType MethodN()
{
return ReturnType.NotImplemented;
}
//////////////////////////////////////////////
// Other class implementation stuff is here
//////////////////////////////////////////////
}