Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Azra [Florent Santin]

.Net, X'Net, aucun lien de parenté V2.0

Actualités

  • MSN Alerts
    View Florent Santin's profile on LinkedIn
     Cet été j’en ai rien à coder : le retour
Class abstraite, implémentation ou héritage?

Je me pose une question de Français technique, suite à une petite discussion avec Cyril (où on était enfin tombé d’accords mais où Visual Studio a tout chamboulé).

On dit que l’on « hérite/dérive » (comme une classe)  d'une classe abstraite en C# , qu’on l'implémente (comme une interface) ou bien les deux?

D'après MSDN on en hérite / dérive:  "a class may implement an unlimited number of interfaces, but may inherit from only one abstract (or any other kind of) class" ... "A class that is derived from an abstract class may still implement interfaces"

Mais D’après Visual Studio on l’implémente :

Vu le nombre de speakers d’événements qui passent par ces blogs, je suis sur que quelqu'un va me donner la bonne réponse ?

Posted: jeudi 23 février 2006 15:02 par azra
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

sebmafate a dit :

en fait, je pense que j'ai un début de réponse...

On dérive une classe abstraite... par contre, celle-ci peut nous obliger à implémenter certains membres.
# février 23, 2006 16:37

Lutinore a dit :

Pour jouer sur les mots je dirais qu'on implémente une classe abstraite si elle contient uniquement des membres abstraits, sinon on dérive une classe abstraite et implémente ses membres abstraits : )
# février 23, 2006 16:42

cyril a dit :

c'est sur qu'on hérite puisqu'en VB le mot clé pour hériter d'une classe abstraite est inherit

mais je suis d'accord avec Maf et Lutinore : on hérite de la classe et implémente ces membres abstraits :p
# février 23, 2006 16:50

christoni a dit :

Voici un extrait issu de http://dotnet.developpez.com/cours/… Bien débuter…Livre C# (plus de 400 pages) par RM di Scala :
"Comme en Delphi et en Java, toutes les classes C# dérivent automatiquement d'une seule et même
classe ancêtre : la classe Object. En C# le mot-clef pour indiquer la dérivation (héritage) à partir
d'une autre classe est le symbole deux points ':', lorsqu'il est omis c'est donc que la classe hérite
automatiquement de la classe Object

Classe abstraite
Comme nous venons de le voir dans l'exemple précédent, une classe C# peut être précédée du mot
clef abstract, ce qui signifie alors que cette classe est abstraite, nous avons les contraintes de
définition suivantes pour une classe abstraite en C# :
Si une classe contient au moins une méthode abstract, elle doit impérativement être déclarée en
classe abstract elle-même. C'est ce que nous avons écrit au paragraphe précédent pour la classe
Etre_Vivant que nous avons déclarée abstract parce qu'elle contenait la méthode abstraite
SeDeplacer.
Une classe abstract ne peut pas être instanciée directement, seule une classe dérivée (sous-classe)
qui redéfinit obligatoirement toutes les méthodes abstract de la classe mère peut être instanciée.
Conséquence du paragraphe précédent, une classe dérivée qui redéfinit toutes les méthodes
abstract de la classe mère sauf une (ou plus d'une) ne peut pas être instanciée et subit la même
règle que la classe mère : elle contient au moins une méthode abstraite donc elle est aussi une
classe abstraite et doit donc être déclarée en abstract.
Une classe abstract peut contenir des méthodes non abstraites et donc implantées dans la classe.
Une classe abstract peut même ne pas contenir du tout de méthodes abstraites, dans ce cas une
classe fille n'a pas la nécessité de redéfinir les méthodes de la classe mère pour être instanciée."

Si j’ai bien compris, une classe fille hérite de sa mère (abstraite ou non), et on implémente (ou non)ses méthodes.
Chez la mère RoleProvider, il doit y avoir des méthodes que la fille MyProvider, n’implémente pas,
Donc la fille doit être déclarée Abstract. C’est sauf erreur le message de VS.
# février 23, 2006 20:08

sebmafate a dit :

c'est super mal écrit (ou alors, c'est l'extrait sortie du contexte)... mais c'est ca.
# février 24, 2006 06:30

daniel a dit :

Florent,
Pour ma part,
Hériter d'une classe abstraite dont les membres sont mustoverride est équivalent à implémenter une interface.
Maintenant, il y a les puristes, les religieux et les pragmatiques qui n'ont forcément pas la même vision.
Je fais partie de la dernière catégorie, désolé.
Le choix de l'héritage ou de l'implémentation dépend du niveau de dépendance, ou de la relation qu'il existe entre les entités mises en jeu.
- Héritage : est une sorte de, est une spécialisation de...
- Implémentation : a un comportement de...

Mais pour lancer la polémique, C# manque de vocabulaire à mon goût...mais c'est pour çà qu'on l'aime,...c'est comme l'Anglais :)
VB.NET marque bien cette différence avec des mots clés différents : INHERITS et IMPLEMENTS
Enfin, VisualStudio fait ce qu'il peut pour donner une aide aux développeurs VB / C#, d'où la confusion...
# février 24, 2006 07:53

Aurelien a dit :

Afin de ne pas tergiverser, personnelement, je l'UTILISE :)
# février 24, 2006 15:58

azra a dit :

Ahahah merci Aurelien, pas mal l'impasse :P
Pourquoi se prendre la tête? :)
# février 24, 2006 17:47
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [WPF] Nouvel article sur c2i.fr par Richard Clark le il y a 10 heures et 51 minutes

- F# nouvelle CTP 1.9.6.2 (update) par Pierrick's Blog le il y a 14 heures et 56 minutes

- La suite ...Proposition de collaboration rédactionnelle entre les communautés de développeurs et Microsoft France par LucasR le 09-05-2008, 17:45

- [Fun] Votre simulateur de vol avec Microsoft ESP par Julien Chable le 09-05-2008, 12:02

- [Best Practices] Customisation du My Site : Comment le modifier en amont et en aval par The Mit's Blog le 09-05-2008, 10:47

- Patrick Tisseghem s'en est allé ... par The Mit's Blog le 09-05-2008, 10:04

- MS AutoCollage par alex# le 09-05-2008, 09:18

- Un grand SharePointeur nous a quitte : Patrick Tisseghem manquera à la communauté ! par RedoBlog - The .NET Gentleman !!! le 09-05-2008, 08:52

- [WPF] Comment charger dynamiquement un fichier XAML qui définit des eventhandler ? par Thomas Lebrun le 09-04-2008, 10:56

- Article sur le filtrage des modèles de site SharePoint par The Grib's Lair [Sébastien PICAMELOT - MVP SharePoint] le 09-04-2008, 00:11