Scrivere del buon codice, a volte, è solo una questione di piccole sfumature; può capitare che anche un programmatore esperto, con anni di esperienza, non abbia chiari alcuni concetti sulle definizioni e sull'utilizzo di alcuni strumenti messi a disposizione dal linguaggio che sta utilizzando: conoscere le differenze di una tecnica rispetto a un'altra può rivelarsi la chiave vincente per sviluppare un software robusto e veloce.
Ad esempio, alcuni programmatori ignorano le diverse
caratteristiche che hanno le classi astratte e le interfacce, finendo con l'usarle indistintamente; scegliere una soluzione al posto dell'altra può complicare inutilmente il lavoro e generare un prodotto meno performante e più lento.
Una
classe astratta è un particolare tipo di classe, che non può essere istanziata e che può unicamente essere ereditata da altre classi: funziona, quindi, come una base di partenza per la scrittura di più classi specifiche e che si rifanno tutte alla stessa classe iniziale. Un'
interfacia, al contrario, è una classe che può essere vista come un insieme di dati e metodi visibili all'esterno degli oggetti, che sono istanze di quella stessa classe.
Dal punto di vista delle
ereditarietà multiple, il framework .NET non ne prevede il supporto, quindi una classe può ereditare unicamente una sola classe astratta, mentre è possibile ereditare più interfacce.
Va evidenziato, ancora, che una classe astratta può definire un
comportamento di default da utilizzare nel caso in cui una classe figlio non ne abbia implementato uno proprio, a differenza di quanto accade con le interfacce, in cui si può solo definire la firma dei metodi; infine, al contrario delle interfacce, le classi astratte forniscono accesso ai metodi per poterli modificare a seconda delle esigenze.
A seconda dei dati e della tipologia di progetto, è bene tenere a mente queste differenze, in modo da poter scegliere la tecnica migliore da adottare per ottenere i massimi risultati.