En C #, quand utiliser les interfaces et quand utiliser les classes abstraites? Quel peut être le facteur décisif?
Les avantages d'une classe abstraite sont:
Les interfaces ne sont que des contrats de transmission de données et ne possèdent pas ces fonctionnalités. Cependant, ils sont généralement plus souples car un type ne peut être dérivé que d'une classe, mais peut implémenter un nombre quelconque d'interfaces.
Les classes abstraites et les interfaces sont sémantiquement différentes, bien que leur utilisation puisse se chevaucher.
Une classe abstraite est généralement utilisée comme base de construction pour des classes similaires. L'implémentation commune aux classes peut être dans la classe abstraite.
Une interface est généralement utilisée pour spécifier une capacité pour les classes, où les classes ne doivent pas être très similaires.
Une autre chose à considérer est que, puisqu'il n'y a pas d'héritage multiple, si vous voulez qu'une classe puisse implémenter/hériter de votre classe d'interface/abstract, mais hériter d'une autre classe de base, utilisez une interface.
La vraie question est de savoir s'il faut utiliser des interfaces ou des classes de base. Cela a été couvert avant.
En C #, une classe abstraite (celle qui porte le mot-clé "abstract") est simplement une classe à partir de laquelle vous ne pouvez pas instancier des objets. Cela sert un objectif différent de simplement faire la distinction entre les classes de base et les interfaces.