Una classe astratta assomiglia molto ad un'interfaccia, ma il concetto è un po 'confuso per i principianti di OOP. Concettualmente, una classe astratta sembra proprio un'interfaccia, ovviamente, senza alcuna implementazione, tuttavia hanno una buona dose di differenze. Mentre una classe astratta può essere parzialmente o completamente implementata, un'interfaccia deve essere implementata completamente. Bene, la differenza più notevole tra i due è che una classe astratta può avere un'implementazione predefinita, mentre un'interfaccia è solo la definizione di metodi che contiene solo le dichiarazioni dei membri. Discutiamo gli aspetti teorici di entrambi in dettaglio.
Una classe astratta è un tipo speciale di classe che funge da base di altre classi e non può essere istanziata. La logica di implementazione di una classe astratta è fornita dalle sue classi derivate. Per fare un abstract di classe, viene utilizzato il modificatore "astratto" che significa che alcune implementazioni mancanti devono essere implementate nella classe derivata da esso. Contiene sia membri astratti che non astratti. Una classe astratta ha lo scopo di fornire funzionalità di base che possono essere ulteriormente condivise e sostituite da più classi derivate. È utile evitare qualsiasi tipo di duplicazione del codice. Assomigliano molto alle interfacce ma con funzionalità aggiuntive.
Un'interfaccia, d'altra parte, non è una classe che contiene solo la firma della funzionalità. È un modello senza implementazione. Concettualmente, è solo la definizione di metodi che contiene solo la dichiarazione dei membri. È una shell vuota che non contiene l'implementazione dei suoi membri. È come una classe base astratta che contiene solo membri astratti come metodi, eventi, indicizzatori, proprietà, ecc. Non può essere istanziata direttamente e i suoi membri possono essere implementati da qualsiasi classe. Inoltre, più interfacce possono essere implementate da una classe, tuttavia una classe può ereditare solo una singola classe.
Classe astratta | Interfaccia |
Una classe astratta può avere tutti i modificatori di accesso per la dichiarazione dei membri delle funzioni, dei sottotitoli e delle proprietà. | Un'interfaccia non è autorizzata ad avere modificatori di accesso per la dichiarazione dei membri di funzioni, sottotitoli, proprietà, ecc. Tutti i membri sono considerati implicitamente pubblici. |
Al massimo una classe può usare solo una classe astratta. | Una classe può ereditare qualsiasi numero di interfacce. |
L'ereditarietà multipla non è supportata nella classe astratta. | Un'interfaccia può supportare l'ereditarietà multipla. |
Tecnicamente, è una classe che può o meno contenere sia la definizione che la sua implementazione. | Un'interfaccia può avere solo la firma della funzionalità, quindi è fondamentalmente una shell vuota. |
Una classe astratta può contenere membri. consts, metodi definiti e stub di metodi. | Un'interfaccia può contenere solo metodi e contenuti. |
Definisce l'identità di base di una classe e viene utilizzata per descrivere oggetti dello stesso tipo di dati. | È usato per descrivere le abilità periferiche di una classe. |
I membri di una classe astratta non possono essere statici a meno che non sia un membro completo. | I membri di un'interfaccia non possono essere statici. |
È ideale per implementazioni dello stesso tipo e comportamento comune. | È preferibile utilizzare le interfacce se diverse implementazioni condividono solo le firme dei metodi. |
Può avere la dichiarazione del costruttore. | Non può avere la dichiarazione del costruttore. |
Una classe astratta ha campi e costrutti predefiniti. | I campi non possono essere definiti nelle interfacce. |
Può avere sia metodi astratti che non astratti. | Può avere solo metodi astratti. |
Qual è la differenza tra una classe astratta e un'interfaccia? Questa è probabilmente una delle domande più frequenti poste in qualsiasi colloquio tecnico. È probabile che tu trovi una pletora di informazioni su classi e interfacce astratte in qualsiasi tutorial in C #, tuttavia, capire la differenza tra i due è piuttosto la parte difficile. Puoi consolidare tutte le informazioni che riesci a trovare e ancora non puoi ottenere abbastanza. Bene, concettualmente entrambi sono i termini più importanti nella programmazione e sono abbastanza simili, tuttavia, differiscono molto in termini di funzionalità. Mentre una classe astratta è un tipo speciale di classe che funge da base per altre classi, un'interfaccia, d'altra parte, è solo una shell vuota con solo dichiarazioni membro.