CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C#] Héritage multiple

m-2
m-2
Niveau 10
13 avril 2008 à 00:01:55

Avant tout, je sais déjà que l'héritage multiple est impossible en C#, sauf si on utilise les interfaces (bien que dans ce cas, il s'agit d'implémentation multiple)

Quoi qu'il en soit, voici mon problème..

je suis en train de créer des extensions pour les contrôles de System.Windows.Forms, dans le but d'ajouter certaines propriétés et fonctionalités pratiqe. Mais comme la plupart de ces fonctionalités sont communes à tout les contrôles que je veux créer (TextBox, ComboBox, etc..) j'aimerais bien pouvoir les mettres dans une seule classe abstraite..

en gros, il faudrait que, par exemple, ma classe de textbox puisse dérivé à la fois de System.Windows.Forms.TextBox et de ma classe abstraite, mais que ma classe de combobox puisse aussi dérivé de ma classe abstraite..

Le mieux que j'ai pu trouver, c'est de faire une interface au lieu d'une classe abstraite, mais ça nous oblige a redéfinir chaque méthodes dans chaque classe et ca fait du code à répétition.. surtout que si je veux apporter une quelconque modification, je dois la faire dans chacune des classes..

des solutions??
merci!

JujuDredd
JujuDredd
Niveau 10
13 avril 2008 à 00:08:43

Euh... J'ai entendu dire qu'on peut faire de k'héritage multiple en C++ :hap:
Enfin, moi en comment je fais du C, j'ai pas de problème de ce genre...

m-2
m-2
Niveau 10
13 avril 2008 à 00:14:31

on peut effectivement faire de l'héritage multiple en C++, le problème, c'est que je suis en C#!

(en passant, quelqu'un sait pourquoi on peut pas faire de l'héritage multiple en C#?)

JujuDredd
JujuDredd
Niveau 10
13 avril 2008 à 00:21:21

Eh bien on m'a expliqué une fois pourquoi on peut pas le faire en Java. Peut-être que c'est pour la même raison qu'en C#.

En fait si t'as une classe C qui hérite des classes A et B pour lesquelles une même méthode m est définie, il n'est pas possible de savoir, quand tu fais C.m(), s'il faut appeler la méthode définie dans A ou celle définie dans B. Donc Sun a décrété "Le plus sûr c'est de pas autoriser l'héritage multiple." En C++ il y a sans doute une règle de priorité que j'ignore.

sangohan55
sangohan55
Niveau 10
14 avril 2008 à 11:59:23

en C++ on utilise dans ce cas le polymorphisme virtual.

voir article de fvirtman :

http://perso.numericable.fr/fvirtman/info/tuto/C_2_02_heritvirtual.cpp

dnob700
dnob700
Niveau 10
14 avril 2008 à 21:12:00

non, ce n'est pas le problème ici.

Pour des raisons de simplicité, l'héritage multiple est impossible ne C#, il faut s'arranger pour concevoir différemment le programme. Mais ce n'est pas toujours facile.

Je ne suis pas assez connaisseur de C# pour savoir comment se problème se résoud, mais il doit être assez commun pour qu'il y est une méthode type.

m-2
m-2
Niveau 10
26 avril 2008 à 19:25:18

si la seule et unique raison d'empêcher l'héritage multiple est qu'une même méthode pourrait être défini dans deux classes abstraites différentes, il suffirait de levé une erreur lorsque cela se produit, de la même manière qu'on lève une erreur quand deux méthodes ont la même signature dans une même classe.. mais bon, qui suis-je pour remettre en question les décisions des grands penseurs!?

quoi qu'il en soit, mon problème reste le même.. croyez-vous qu'un pattern pourrait régler mon problème? j'ai fais une petite rechercher à ce sujet mais je n'ai rien trouver d'assez intéressant.. La meilleure solution que j'ai pu trouvé à ce jour consiste à définir une classe qui contient toutes les propriétés communes à mes classes d'extension de contrôle et de déclarer un objet de cette classe dans chacun des contrôles.. cette solution n'est toujours pas idéal puisqu'elle nous oblige à accéder au propriété en utilisant explicitement l'objet (Control.ObjetPropriete.LaPropriete)

à moins de déclarer des getter/setter dans mes classes de controles qui accèderait directement aux propriétés de l'objet (Control.LaPropriete) mais avec cette façon, on revient à la case départ, soit, on est obligé de faire de la répétition de code d'un control à l'autre..

qu'en pensez-vous?

LGV
LGV
Niveau 28
27 avril 2008 à 12:45:23

"il suffirait de levé une erreur lorsque cela se produit"

SAUF QUE ce n'est pas une erreur; et on perdrait l'avantage de la "cross-delegation".

L'heritage multiple ne presente pas de probleme en lui meme, mais ses mechanismes sont un peu complexe a bien comprendre. Le veritable soucis, c'est que des generations (..) de programmeurs on fait n'importe quoi avec, sans rien vraiment n'y saisir, au point que ce soit devenu un "risque" du langage pour les programmeurs "standards".
Les "nouveaux" langages objets rendent cela plus explicite avec les notions d'interfaces/class et l'absence d'heritage multiple de classes.

m-2
m-2
Niveau 10
27 avril 2008 à 17:12:44

alors quelles solutions peuvent s'offrir à moi?

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment