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

ASP.NET Discussion :

Héritage d'interface avec masquage de méthode


Sujet :

ASP.NET

  1. #1
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut Héritage d'interface avec masquage de méthode
    Hello à tous.

    J'ai un petit problème.

    J'ai deux interface. La première définit entre autres, une méthode A. La seconde interface hérite de la première interface et implémente une méthode A dont le renvoi est différent. Je la préfixe donc avec le mot clé new, de façon à masquer la méthode de l'interface de base.

    Le hic est que lorsque je défini une classe qui implémente la seconde interface, il veut que j'y définisse les deux méthodes, ce qui n'est pas ce que je souhaite.

    Un petit exemple explicatif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    interface A
    {
        object getValue();
    }
     
    interface B : A
    {
       new object[] getValue();
    }

    Si je défini une classe C, le compilateur me force à implémenter la méthode GetValue de l'interface B mais également celle de l'interface A.
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    C'est parfaitement normal... Si C implémente B, alors C implémente aussi A. Tu dois donc implémenter les 2 méthodes. A la limite, tu peux mettre un code bidon dans la méthode de A.

    Mais à mon avis c'est une mauvaise conception de masquer une méthode de l'interface. Si la méthode de B ne renvoie pas la même chose que celle de A, alors il faut lui donner un autre nom.

  3. #3
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Points : 8 734
    Points
    8 734
    Par défaut
    +1

  4. #4
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    En fait, j'ai procédé de la sorte parce que à part cette méthodes, toutes les autres méthodes sont identiques, mais en le disant, je viens de trouver une solution plus élégante... Je vais définir une première interface qui implémente les méthodes communes puis deux sous-interfaces qui implémentent les méthodes spécifiques.
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Août 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 82
    Points : 332
    Points
    332
    Par défaut
    Effectivement ça sera beaucoup plus propre.
    Pour lancer le début, je dirais juste qu'il faut faire très attention à l'utilisation du "new". Non seulement 50% des développeurs ne le connaissent pas bien, mais en plus il est source potentielle de bug car la méthode de base pourra être appelée selon l'utilisation que l'on fait de la classe de base et de sa dérivée. Gros danger potentiel.

    Pour en revenir aux enums, la classe va effectivement implémenter les deux interfaces, mais en un sens, c'est dommage. En un sens seulement ! Je m'explique.
    .NET 2.0 introduit l'héritage. A des fins de compatibilité ascendante, on ne bannit pas du framework les collections et autres interfaces non génériques (et on ne les bannira probablement jamais)

    Cela veut-il dire qu'on devra "jusqu'à la fin des temps" implémenter un GetEnumerator ET un GetEnumerator<T> sur toutes nos classes enumérables ??? Oui probablement, mais c'est quand même bien dommage.

    Une opinion là dessus ?
    Pierre-Emmanuel Dautreppe
    .NET Architect & Evangelist
    Voir mes expériences, tutoriels, news, ... concernant .NET, XP et le TDD :
    http://www.pedautreppe.com

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/11/2011, 18h11
  2. Une interface avec héritage
    Par abdelilah dans le forum Débuter avec Java
    Réponses: 11
    Dernier message: 26/02/2010, 14h37
  3. Piloter une interface avec des relais
    Par Yepazix dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 26/10/2004, 19h46
  4. Interfaces avec NetBeans
    Par messier79 dans le forum NetBeans
    Réponses: 3
    Dernier message: 26/04/2004, 15h55

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