IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Redéfinir interface implémentée par une classe mère


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut Redéfinir interface implémentée par une classe mère
    Bonjour à tous
    J'ai une classe mère Entity qui implemente une interface toute simple (pour l'instant ) IEntityInfos.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public interface IEntityInfos
    {        
        Rect Bounds { get; set;}
    }
     
    class Entity : IEntityInfos
    { 
       Rect IEntityInfos.Bounds
            {
                get
                {
                    throw new NotImplementedException();
                }
                set
                {
                    throw new NotImplementedException();
                }
            }
    }
    Jusque là tout va bien, mais à présent je veux créer plusieurs classes qui héritent d'Entity et le drame c'est que je ne sais pas comment faire pour obliger mes classes filles à (implémenter/redéfinir je ne sais pas trop) les propriétés de l'interface de la classe mère.

    Mon objectif est de pouvoir récupérer les Bounds de mes différents types d'entités simplement avec un Entity.Bounds (il y a une certaine notion de polymorphisme derrière ça il me semble )

    Merci

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    si tu veux redefinir bounds par exemple tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public new Rectangle Bounds //c'est un Rectangle je crois??
    {
    get;
    set;
    }
    il ne cherchera pas celui defini dans la classe mère et tu pourra le faire grace au mot clé new...

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Si tu peux mettre de côté l'implémentation explicite de l'interface, alors il suffit de déclarer la propriété comme virtuelle (virtual) ce qui permettre de la redéfinir (override) dans les classes enfants.

    Maintenant, ceci suffirait peut être (avec les informations données en tout cas).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public abstract class EntityBase
    {
        Rect _bounds;
     
        public Rect object Bounds
        {
            get
            {
                return _bounds;
            }
            set
            {
                _bounds=value;
            }
        }
    }
     
    public class MyEntity : EntityBase
    {
        ...
    }
    Chaque classe qui dérive de EntityBase aura ses propres limites (bounds) et tu pourras y accéder sans problème.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    Merci pour vos réponses.
    sisqo60 : ta solution semble servir à masquer et remplacer une propriété héritée déjà existante. Dans mon cas la propriété en question est une implémentation de mon interface dans la classe Entity. Donc si j'applique ta méthode ça donnerait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class PointEntity:Entity
        {
    public new Rect IEntityInfos.Bounds
            {
                get;
                set;
            }
    }
    Malheuresement ça ne compile pas, les modificateurs "public" et "new" ne sont pas valides dans ce cas...
    EDIT : c'est struct System.Windows.Rect

    StormimOn : Oui je pense en effet que je pourrais me contenter d'hériter d'une classe abstraite dans mon cas, je vais probablement retenir cette solution sinon je vais pas pouvoir avancer.
    EDIT : je pense que tu as oublié de préciser le modificateur "virtual" lorsque tu déclare la propriété, si je ne le met pas je ne pas faire de override dans la classe fille
    Maintenant, si une solution avec les interfaces est possible, ça m'intéresse ... pour la culture quoi

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Par défaut
    Code vinpowful : Sélectionner tout - Visualiser dans une fenêtre à part
    Malheuresement ça ne compile pas, les modificateurs "public" et "new" ne sont pas valides dans ce cas...

    Il me semble que le new doit aller dans les classe filles.
    Ca dans la classe mere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class PointEntity:Entity
    {
            public Rect IEntityInfos.Bounds
            {
                get;
                set;
            }
    }
    Ca dans les classes fille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class PointEntityFilleN:PointEntity
    {
            public new Rect IEntityInfos.Bounds
            {
                get;
                set;
            }
    }
    A tester...

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    je pense que tu as oublié de préciser le modificateur "virtual" lorsque tu déclare la propriété
    Je confirme, mais je l'avais bien indiqué texctuellement avant, donc bon

    Maintenant, si une solution avec les interfaces est possible, ça m'intéresse ... pour la culture quoi
    C'est bien sûr possible, mais cela n'apporte rien par rapport à la classe abstraite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public interface IEntityInfos
    {
        Rect Bounds { get; set; }
    }
     
    public class Entity : IEntityInfos
    {
        private Rect _bounds;
     
        public virtual Rect Bounds
        {
            get
            {
                return _bounds;
            }
            set
            {
                _bounds=value;
            }
        }
    }

  7. #7
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 39
    Par défaut
    Merci à tous, problème résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Classe fille implémentant une interface d'une classe mère
    Par Ccckris dans le forum Architecture
    Réponses: 1
    Dernier message: 05/03/2014, 13h52
  2. Récupérer une interface implémentée par une classe
    Par samaury dans le forum Langage
    Réponses: 2
    Dernier message: 20/04/2010, 22h04
  3. [POO]Appelé une méthode d'une classe mère
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 14h44
  4. ou mettre une structure utilisée par une classe
    Par grand's dans le forum C++
    Réponses: 10
    Dernier message: 28/07/2005, 18h53
  5. Réponses: 12
    Dernier message: 01/07/2004, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo