Différence entre la classe abstraite et l'interface dans C# (avec table)

Lors de la conception d'applications ou du démarrage d'une carrière en programmation, il est nécessaire de connaître la différence entre classe abstraite et interface dans C#. La classe abstraite et l'interface sont utilisées pour accomplir l'abstraction où l'on peut comprendre les méthodes abstraites. Bien qu'ils ne puissent pas être utilisés en même temps.

Les classes abstraites et les interfaces peuvent sembler similaires à certains égards, mais il existe des différences clés qui aident à déterminer quel est le meilleur choix pour quelqu'un pour atteindre un certain objectif lié à la programmation.

Il ne faut jamais avoir l'intention d'utiliser directement une classe abstraite. Cette classe doit avoir au moins une méthode abstraite. Et il sera marqué par le mot-clé ou le modificateur abstract dans la définition de class. D'un autre côté, une interface permet seulement à quelqu'un de définir des fonctionnalités. Il ne peut pas être mis en œuvre. Bien qu'une classe ne puisse développer qu'une seule classe abstraite, elle peut également tirer parti de diverses interfaces.

Classe abstraite vs interface dans C#

le différence entre la classe abstraite et l'interface dans C# est que la fonction "principale" d'une classe abstraite est d'expliquer l'identité réelle d'une classe alors que la fonction principale d'une interface est d'expliquer les possibilités extérieures d'une classe. L'abstraction complète n'est pas fournie par une classe abstraite alors qu'une interface peut fournir une abstraction complète.

L'héritage multiple n'est pas possible dans une classe abstraite alors qu'une interface peut rendre l'héritage multiple possible.

Tableau de comparaison entre la classe abstraite et l'interface dans C#

Paramètre de comparaisonClasse abstraiteInterface en C#
FonctionnalitéL'ajout d'une nouvelle méthode à une classe abstraite donnera la possibilité de fournir une implémentation par défaut et ainsi tout le code actuel fonctionnera correctementL'ajout d'une nouvelle méthode à une interface permettra de retrouver toutes les implémentations de l'interface et de définir l'implémentation de la méthode récente
Divers héritageUne seule classe abstraite peut être héritée par une classePlusieurs interfaces peuvent être héritées par une classe
Que contiennent-ils?La classe abstraite contient des membres de données et des constructeursUne interface dans C# ne contient pas de membre de données et de constructeurs
FournirUne classe abstraite peut fournir un code complet par défaut et / ou les détails qui doivent être remplacésUne interface en C# n'est capable de fournir aucun code, juste la signature
Vitesse de mouvementUne classe abstraite est rapide quand il s'agit de vitesseUne interface en C# a besoin de plus de temps pour obtenir la méthode réelle dans les classes correspondantes

Qu'est-ce que la classe abstraite dans C#?

Une classe abstraite est quelque chose qui ne peut être destiné qu'à être une classe de base d'autres classes. Ce sont des classes qui ont une ou plusieurs méthodes abstraites. Une méthode abstraite est connue comme une méthode annoncée, mais elle ne contient aucune implémentation.

Pour créer une classe, nous devons utiliser un modificateur 'abstract'. Ce modificateur indique qu'il pourrait y avoir quelques implémentations manquantes qui devront être mises en action dans la classe qui en est extraite. Les membres abstraits et non abstraits peuvent être contenus dans une classe abstraite.

Cette classe abstraite doit avoir au moins une méthode abstraite qui a déjà été discutée ci-dessus. Sans la méthode, nous ne pouvons pas déclarer cette classe comme une classe « abstraite ».

Parfois, les classes abstraites peuvent ne pas être instanciées et elles ont besoin de sous-classes pour fournir des implémentations pour les méthodes abstraites. Si nous créons une classe abstraite, nous créons une classe de base qui peut contenir une ou plusieurs méthodes terminées, mais nous trouverons au moins une ou plusieurs méthodes qui restent inachevées et déclarées abstraites.

Si toutes les méthodes d'une classe abstraite restent incomplètes, ce sera comme une interface. Fournir une définition d'une classe de base sur le fonctionnement d'un ensemble de classes dérivées, puis laisser les programmeurs remplir l'implémentation dans les classes dérivées est le véritable objectif d'une classe abstraite.

Nous pouvons également dire que le but d'une classe abstraite est de fournir une définition de classe de base.

Qu'est-ce que l'interface dans C#?

D'autre part, une interface n'est pas une classe qui n'a qu'une indication de fonctionnalité. Nous pouvons l'appeler un modèle sans implémentation. Théoriquement, c'est seulement une définition de méthodes qui a la déclaration des membres.

Nous pouvons le considérer comme une coquille vide qui ne contient pas l'implémentation de ses membres. L'interface est comme une classe de base abstraite qui n'aura que des membres abstraits tels que des méthodes, des indexeurs, des événements, des propriétés, etc.

L'instanciation directe n'est pas possible et ses membres peuvent être implémentés par n'importe quelle classe. De plus, diverses interfaces peuvent être implémentées par une classe, néanmoins, une classe ne peut obtenir qu'une seule classe. En d'autres termes, on peut dire qu'une interface n'a que la déclaration des membres et ne contient pas l'implémentation de ces membres.

Une classe implémente l'interface, et elle doit fournir la définition des méthodes énoncées dans l'interface. Cela signifie qu'une interface apporte une structure standard que la classe dérivée devra suivre.

Principales différences entre la classe abstraite et l'interface dans C#

  1. Une classe abstraite est connue comme un certain type de classe qui peut contenir une explication sans implémentation. D'un autre côté, une interface n'est qu'un pattern qui n'est pas capable de faire quoi que ce soit. Donc, techniquement, c'est juste une coquille, qui est vide.
  2. Une classe ne peut utiliser qu'une seule classe abstraite. Par conséquent, plusieurs héritages ne sont pas pris en charge. D'un autre côté, un héritage peut prendre en charge divers héritages, ce qui signifie qu'une classe peut hériter de n'importe quel nombre d'héritages.
  3. Une classe abstraite peut contenir quelques modificateurs d'accès tels que des subs, des fonctions, des propriétés, etc. Alors qu'une interface n'est pas autorisée à contenir des modificateurs d'accès et que toutes les méthodes doivent inévitablement être définies comme publiques.
  4. Une classe abstraite a tendance à agir comme une classe de base pour toutes les autres classes, elle est donc capable de déclarer ou d'utiliser n'importe quelle variable alors qu'une interface n'est pas autorisée à en déclarer.
  5. Une classe abstraite a tendance à s'utiliser pour définir l'identité principale d'une classe et peut être utilisée pour des objets d'un type de date similaire. Et une interface est utilisée pour définir la capacité périphérique d'une classe.

Foire aux questions (FAQ) sur la classe abstraite et l'interface dans C#

À quoi sert la classe abstraite dans C#?

C# est un langage de programmation orienté objet à usage général. C'est de Microsoft. L'objectif principal de C# est d'utiliser la puissance de calcul du C ++ avec la facilité de programmation de Virtual Basic.
Il est principalement basé sur C ++ et contient également des fonctionnalités similaires à Java.

Une classe abstraite est un moyen de réaliser l'abstraction dans C# et elle ne peut pas être directement instanciée. La fonction de la classe abstraite est de créer une fonctionnalité ou de créer un comportement commun dont les sous-classes peuvent hériter, implémenter ou remplacer.

Il fournit essentiellement un plan aux classes dérivées et donne des instructions sur ce qu'il faut implémenter par les classes dérivées lorsqu'une classe abstraite est héritée par elles.

Qu'est-ce que l'interface dans C# et pourquoi est-elle utilisée?

Une interface dans C# peut être définie comme une définition de type comme une classe. Mais il ne fournit que des déclarations et est hérité par les classes et les structs.

Il est utilisé avec une classe pour définir un contrat (un accord sur ce qui est fourni par la classe à une application). Il ne déclare que les méthodes et les différentes propriétés et une classe dictera ce que la méthode fera réellement.

Il ne peut pas être instancié en tant qu'objet et n'est utilisé que comme collection de méthodes et de déclarations de propriétés. Il définit quelles opérations peuvent être ou seront effectuées par une classe.

Qu'est-ce que le polymorphisme dans C#?

Le polymorphisme est généralement exprimé sous la forme d'une interface et de plusieurs fonctions. Le polymorphisme dans C# signifie fournir la capacité de prendre plusieurs formes. Après l'encapsulation et l'héritage, c'est un autre concept pilier de la programmation orientée objet. C# offre la possibilité à des classes d'implémenter différentes méthodes qui sont généralement appelées avec le même nom.

Il existe deux types de polymorphismes dans C#:

  1. Polymorphisme au moment de la compilation - Cela signifie définir plusieurs méthodes avec des paramètres différents mais avec le même nom. Cela nous permet d'utiliser le même nom de méthode pour effectuer diverses tâches uniquement en passant des paramètres différents.
  2. Polymorphisme d'exécution - Cela signifie créer une fonction similaire dans la classe dérivée pour remplacer une méthode de classe de base. Dans cette méthode, nous pouvons créer une méthode avec le même nom et les mêmes paramètres pour effectuer différentes tâches.

Conclusion

Comprendre la différence entre les deux est une tâche assez difficile. Nous pouvons combiner toutes les informations que nous pouvons trouver et cela ne suffira toujours pas. Théoriquement parlant, les deux sont les termes les plus importants de la programmation et sont assez similaires, mais en termes de fonctionnalité, ils diffèrent beaucoup.

Alors qu'une classe abstraite est un certain type de classe qui fonctionnera comme une base pour d'autres classes, une interface sera simplement un shell vide avec uniquement des déclarations de membres.

Références

  1. https://csharp.net-tutorials.com/classes/abstract-classes/
  2. https://dl.acm.org/doi/abs/10.1145/512035.512041
x
2D vs 3D