Différence entre la classe abstraite et l'interface en C # Différence entre

Anonim

Une classe abstraite ressemble beaucoup à une interface, mais le concept est un peu déroutant pour les débutants de la POO. Conceptuellement, une classe abstraite ressemble à une interface, bien sûr, sans aucune implémentation, mais elle a sa juste part de différences. Alors qu'une classe abstraite peut être partiellement ou entièrement implémentée, une interface doit être complètement implémentée. Eh bien, la différence la plus notable entre les deux est qu'une classe abstraite peut avoir une implémentation par défaut, alors qu'une interface est juste la définition de méthodes qui ne contient que les déclarations de membres. Discutons les aspects théoriques des deux en détail.

Qu'est-ce qu'une classe abstraite?

Une classe abstraite est un type spécial de classe qui agit comme base d'autres classes et ne peut pas être instancié. La logique d'implémentation d'une classe abstraite est fournie par ses classes dérivées. Pour faire un résumé de classe, le modificateur "abstract" est utilisé, ce qui signifie que certaines implémentations manquantes doivent être implémentées dans la classe dérivée. Il contient à la fois des membres abstraits et non-abstraits. Une classe abstraite est destinée à fournir des fonctionnalités de base qui peuvent être partagées et remplacées par plusieurs classes dérivées. Il est utile d'éviter toute duplication de code. Ils ressemblent beaucoup à des interfaces mais avec des fonctionnalités supplémentaires.

Qu'est-ce qu'une interface?

Une interface, en revanche, n'est pas une classe qui ne contient que la signature de la fonctionnalité. C'est un modèle sans implémentation. Conceptuellement parlant, c'est juste la définition des méthodes qui ne contient que la déclaration des membres. C'est un shell vide qui ne contient pas l'implémentation de ses membres. C'est comme une classe de base abstraite qui ne contient que des membres abstraits tels que des méthodes, des événements, des indexeurs, des propriétés, etc. Elle ne peut pas être instanciée directement et ses membres peuvent être implémentés par n'importe quelle classe. De plus, plusieurs interfaces peuvent être implémentées par une classe, cependant, une classe peut seulement hériter d'une seule classe.

Classe abstraite et interface: différence entre la classe abstraite et l'interface en C #

  1. héritage multiple - Une classe ne peut utiliser qu'une seule classe abstraite, donc l'héritage multiple n'est pas supporté. Une interface, en revanche, peut prendre en charge l'héritage multiple, ce qui signifie qu'une classe peut hériter de n'importe quel nombre d'héritages.
  2. Définition de Classe abstraite et interface en C # - Une classe abstraite est un type spécial de classe qui peut contenir une définition sans implémentation. La logique d'implémentation est fournie par ses classes dérivées. Il peut avoir des méthodes abstraites et non abstraites.D'un autre côté, une interface est juste un modèle qui ne peut rien faire. Techniquement, c'est juste une coquille vide.
  3. Implémentation - Une classe abstraite peut contenir à la fois la définition et son implémentation. C'est une classe incomplète qui ne peut pas être instanciée. Une interface ne peut avoir que la signature de la fonctionnalité sans aucun code.
  4. Modificateurs d'accès - Une classe abstraite peut avoir plusieurs modificateurs d'accès tels que subs, functions, properties, etc., tandis qu'une interface n'est pas autorisée à avoir des modificateurs d'accès et toutes les méthodes doivent être implicitement définies comme publiques.
  5. Homogénéité - Une classe abstraite est utilisée pour les implémentations de même type, comportement et statut, tandis qu'une interface est utilisée pour les implémentations qui partagent uniquement les signatures de méthodes.
  6. Déclaration - Une classe abstraite agit comme une classe de base pour toutes les autres classes afin qu'elle puisse déclarer ou utiliser n'importe quelle variable alors qu'une interface n'est pas autorisée à déclarer des variables.
  7. Déclaration du constructeur - Alors qu'une classe abstraite peut avoir une déclaration de constructeur, une interface ne peut pas avoir de déclaration de constructeur.
  8. Core versus Peripheral - Une classe abstraite est utilisée pour définir l'identité de base d'une classe et peut être utilisée pour des objets du même type de données. Une interface, d'autre part, est utilisée pour définir la capacité périphérique d'une classe.
  9. Rigide ou souple - Une classe abstraite est plus souple en termes de fonctionnalité, du moins du point de vue du développeur, tandis qu'une interface est plus rigide.

Classe abstraite et interface: Table

Résumé Classe

Interface

Une classe abstraite peut avoir tous les modificateurs d'accès pour la déclaration des membres des fonctions, sous-marins et propriétés. Une interface n'est pas autorisée à avoir des modificateurs d'accès pour la déclaration des membres des fonctions, sous-marins, propriétés, etc. Tous les membres sont supposés implicitement publics.
Une classe peut tout au plus utiliser une seule classe abstraite. Une classe peut hériter d'un nombre quelconque d'interfaces.
L'héritage multiple n'est pas pris en charge dans la classe abstraite. Une interface peut prendre en charge plusieurs héritages.
Techniquement, c'est une classe qui peut ou non contenir à la fois la définition et sa mise en œuvre. Une interface ne peut avoir que la signature de fonctionnalité, c'est donc essentiellement un shell vide.
Une classe abstraite peut contenir des membres. consts, méthodes définies et stubs de méthode. Une interface ne peut contenir que des méthodes et des consts.
Il définit l'identité de base d'une classe et est utilisé pour décrire des objets du même type de données. Il est utilisé pour décrire les capacités périphériques d'une classe.
Les membres d'une classe abstraite ne peuvent être statiques que s'ils sont membres complets. Les membres d'une interface ne peuvent pas être statiques.
Il est idéal pour des implémentations de même type et de comportement commun. Il est préférable d'utiliser des interfaces si plusieurs implémentations partagent uniquement des signatures de méthode.
Il peut avoir une déclaration de constructeur. Il ne peut pas avoir de déclaration de constructeur.
Une classe abstraite possède des champs et des constrictions prédéfinis. Les champs ne peuvent pas être définis dans les interfaces.
Il peut avoir des méthodes abstraites et non abstraites. Il ne peut avoir que des méthodes abstraites.

Résumé

Quelle est la différence entre une classe abstraite et une interface? C'est probablement l'une des questions les plus fréquemment posées dans toute interview technique. Vous trouverez probablement une pléthore d'informations sur les classes et les interfaces abstraites dans n'importe quel tutoriel C #, cependant, comprendre la différence entre les deux est la partie la plus difficile. Vous pouvez consolider toutes les informations que vous pouvez trouver et ne pouvez toujours pas en avoir assez. Eh bien, conceptuellement les deux sont les termes les plus importants dans la programmation et sont tout à fait même, cependant, ils diffèrent beaucoup en termes de fonctionnalité. Tandis qu'une classe abstraite est un type spécial de classe qui sert de base pour d'autres classes, une interface, d'autre part, est juste un shell vide avec seulement des déclarations de membres.