Differenza tra Abstract Class e Interface in C #

Una classe astratta sembra molto simile a 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.

Che cos'è una classe astratta?

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.

Che cos'è un'interfaccia?

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.

Abstract Class vs. Interface: differenza tra Abstract Class e Interface in C #

  1. Multiple Ereditarietà - Una classe può usare solo una classe astratta, quindi l'ereditarietà multipla non è supportata. Un'interfaccia, d'altra parte, può supportare l'ereditarietà multipla, il che significa che una classe può ereditare qualsiasi numero di eredità.
  2. Definizione di Classe astratta e interfaccia in C # - Una classe astratta è un tipo speciale di classe che può contenere definizioni senza implementazione. La logica di implementazione è fornita dalle sue classi derivate. Può avere metodi astratti e non astratti.Un'interfaccia, d'altra parte, è solo un modello che non può fare nulla. Tecnicamente, è solo un guscio vuoto.
  3. Implementazione - Una classe astratta può contenere sia la definizione che la sua implementazione. È una classe incompleta che non può essere istanziata. Un'interfaccia può avere solo la firma della funzionalità senza alcun codice.
  4. Modificatori di accesso - Una classe astratta può avere diversi modificatori di accesso come sottosezioni, funzioni, proprietà, ecc., Mentre un'interfaccia non può avere modificatori di accesso e tutti i metodi devono essere implicitamente definiti come pubblici.
  5. Omogeneità - Una classe astratta viene utilizzata per implementazioni dello stesso tipo, comportamento e stato, mentre un'interfaccia viene utilizzata per implementazioni che condividono solo firme di metodo.
  6. Dichiarazione - Una classe astratta funge da classe base per tutte le altre classi in modo che possa dichiarare o utilizzare qualsiasi variabile mentre un'interfaccia non può dichiarare alcuna variabile.
  7. Constructor Declaration - Mentre una classe astratta può avere la dichiarazione del costruttore, un'interfaccia non può avere la dichiarazione del costruttore.
  8. Core vs. Peripheral - Una classe astratta viene utilizzata per definire l'identità nucleo di una classe e può essere utilizzata per oggetti dello stesso tipo di dati. Un'interfaccia, d'altra parte, viene utilizzata per definire l'abilità periferica di una classe.
  9. Rigida vs Supple - Una classe astratta è più flessibile in termini di funzionalità, almeno dal punto di vista dello sviluppatore, mentre un'interfaccia è più rigida.

Classe astratta e interfaccia: tabella

Classe astratta

interfaccia

Una classe astratta può avere tutti i modificatori di accesso per la dichiarazione di membri di funzioni, sottosezioni e 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.
Una classe può al massimo 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ò contenere o meno 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.

Riepilogo

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, l'interfaccia, d'altra parte, è solo una shell vuota con le sole dichiarazioni dei membri.