Cercherò di essere semplice.
Una classe astratta è una classe. È speciale nel fatto che non puoi creare oggetti di classe astratta. Una classe non astratta nella classe concreta chiamata.
Una classe astratta, essendo una classe, può avere elementi usuali in essa come campi, proprietà, metodi, eventi, indicizzatori, ecc. Si noti che, poiché è garantito che la classe astratta non verrà istanziata per creare oggetti, alcuni di questi elementi cab essere senza implementazioni (es. metodi senza corpo).
Un'interfaccia è una descrizione dei membri che alcune altre classi avranno di sicuro. L'interfaccia C # può descrivere solo metodi, proprietà, indicizzatori ed eventi.
Se una classe implementa l'interfaccia, allora deve implementare tutti i membri descritti dall'interfaccia.
Ciò significa che se una classe, implementando un'interfaccia, non implementa tutti i membri descritti da tale interfaccia, allora tale classe deve essere di classe astratta!
Una classe astratta può essere una classe "semi-cotta", nel senso che ha fornito pochi metodi con il corpo, ma pochi metodi non hanno corpo ecc. Un'interfaccia non può mai implementare alcun membro che descrive.
La classe astratta partecipa alla gerarchia delle classi in base all'ereditarietà. Nota che in C #, una classe può avere al massimo una classe genitore che può o meno essere astratta.
Una classe può implementare molte interfacce contemporaneamente.
Ci sono molti casi d'uso per entrambi.
Le seguenti dichiarazioni dovrebbero darti più chiarezza:
- La classe deve essere astratta o concreta.
- L'interfaccia, per definizione, è astratta.
-
Nessuna interfaccia o classe astratta può essere istanziata.
-
La classe può ereditare da zero o una (astratta o concreta) classe.
- La classe può implementare zero o più interfacce.
-
L'interfaccia può ereditare da zero o più interfacce.
-
L'interfaccia non può ereditare una classe.
-
La classe astratta potrebbe avere membri con implementazione.
-
L'interfaccia non può avere alcun membro con implementazione.
-
Per essere concreti, la classe deve implementare tutti i membri nell'interfaccia.
Spero che questo aiuti.