Petite question. Hormis quand on veut faire de l'héritage multiples. Quelles sont les circonstances dans lesquelles vous préférez utiliser une interface qu'une classe abstraite ?
Je sais que se sont 2 choses différentes mais qui, au final, reviennent à implémenter ou override les méthodes.
J'ai donc une vision un peu flou de l'utilité entre les 2.
- Mes classes doivent toute notifier un changement à la vue ? Elles doivent implémenter l'interface INotifyPropertyChanged
- L'implémentation de l'interface est complexe, redondante et identique au sein d'une série de classes ? Gérer un changement de comportement devient un sacré casse-tête et je préfère donc implémenter l'interface INotifyPropertyChanged dans une classe mère abstraite.
Dans ce cas l'avantage de la classe abstraite est une implémentation par défaut pour laquelle on veut éviter une redondance de code. Mais c'est le seul avantage, sinon autant implémenter une interface déjà prévue dans le framework et qui offre toute la souplesse requise.
Ensuite en restant à un niveau très basique, la question ne se pose pas que pour l'implémentation, mais aussi pour le passage en paramètre. Je peux très bien écrire une classe qui liste un certain type d'objets d'une certaine façon, avec un tri adapté, un accès adapté, un comportement adapté, etc... Il y en a déjà pas mal : Enumerable, List, ObservableCollection, Dictionary, etc... La question est : comment manipuler cet objet en s'attendant à un comportement "général" mais sans connaître le détail ? C'est la magie des interfaces comme IEnumerable ou IList qui vont permettre de passer en paramètre des objets ayant le comportement approprié, sans avoir besoin de savoir comment ça se passe, et sans écrire une méthode prenant en paramètre chaque type précis (ni écrire une méthode prenant en paramètre un objet trop général dont le type ne permettrait pas de garantir le comportement). C'est simple et souple, et robuste ! Une classe abstraite offrirait beaucoup moins de souplesse, il faudrait overrider à tout va. Avec les interfaces, l'objet doit obéir à une règle très générale, mais peu importe comment il s'y prend.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Un bon dev est un dev qui sait Googler
Un bon dev est un dev qui sait Googler