fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 2021
-
16 nov. 2006 à 13:38
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 2021
-
17 nov. 2006 à 09:54
bonjour,
Le novice en POOa besoin d'aide
voici mon code :
public class Device
{
public void Update();
}
public class Camera : Device
{
public void Update();
}
public class Recoder : Device
{
public void Update();
}
C'est donc plusieurs classes qui dérive de Device.
Quelque part dans mon code, j'ai :
Device dev = null;
dev = MaColletionDeDevice[x]; // cet élément est de type Camera
dev.Update();
En fait je passe dans la fonction Update de la classe Device, comment faire pour aller dans la classe Camera ? (la fonction de Device ne peut pas être virtuelle).
Dois-je obligatoirement tester le type et faire un cast ?
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 16 nov. 2006 à 13:45
Salut,
Ce qui me paraît être une bonne solution est de rendre la class Device abstraite. L'appel à la méthode Update serait automatiquement faire par le bon object.
Cela dit, je vois pas ce qui t'empêcherais de mettre un membre virtual?
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 16 nov. 2006 à 16:14
Effectivement comme le dit Lutinore, tu n'a pas mis "override" devant les méthodes dans les classe 'filles'. Ce qui veut dire que tu "cache" la méthode mère, au lieu de la dériver. Et d'ailleur tu devrais avoir un warning lors de la compile, t'invitant à mettre un "new" pour cacher explicitement la méthode mère...
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 16 nov. 2006 à 16:46
Ca y est démo finie. Encore plein de modifs en perspective !!!
Après le message de Bidou, j'avais tester le "new" et l'"override".
Quand je mets "new", ça me dit : ne masque pas le membre hérité.
En fait en essayer de vous expliquer de nouveau je crois que j'ai trouvé mon pb, j'avais par erreur simplifié la déclaration de mes fonctions, grosse erreur !!!!! C'est le paramètre qui est la cause de mes soucis (je crois.
Regardez ci-dessous :
public abstract class GenericObject : IGenericObject, IXmlSerializable
public class Device : GenericObject, IDevice
public virtual void UpdateFrom(Device source)
public class Camera : Device, ICamera
public override void UpdateFrom(Camera source)
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 16 nov. 2006 à 18:02
Oui, en fait, j'ai fait un cast à la source pour éviter le problème.
Mais si dans la Class Camera, je met en paramètre Device (alors que c'est une Camera) et qu'à l'intérieur de la fonction, je cast le paramètre en Camera :
Style :
public override void UpdateFrom(Device source)
{
Camera maCamera = source as Camera;
}
alors ton paramètre source ne sert a rien, et tu n'a pas a "caster" l'objet sur lequel tu travailles.
Précision, n'oublis pas de tenir compte du cas ou le "source as Camera" échoue car ce n'est pas une caméra mais un autre device qui est passé en paramètre...
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 17 nov. 2006 à 09:54
Merci,
Pour éviter tout pb, je vais faire le cast à la source comme ca je suis sure d'aller dans la bonne classe.
Nikoui, je t'enverrai une capture d'écran de ce que je fais. Tu vas voir le truc de fou, c'est assez simple à utiliser, donc pour le marketing c'est simple à faire.
Et après je crois que je devrai quitter le projet parce que ces fameux Device devront apparaître dans l'explorateur de Windows, donc Shell Extension, chaud devant !!!!