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 :

Masquage de propriétés héritées


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 86
    Points
    86
    Par défaut Masquage de propriétés héritées
    Bonjour.

    Je voudrais savoir s'il est possible de "masquer" ou "d'ignorer" des propriétés héritées (et par extension des méthodes héritées) d'une classe parente.

    ex: J'ai une classe A parente dont hérite une classe B enfant. La classe A possède 2 propriétés P1 et P2 héritables mais seule P1 m'interresse. Puis-je faire en sorte que ma classe B ne propose que P1 ?

    J'espère avoir été clair.

  2. #2
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Ce lien devrait t'intéresser:

    Polymorphisme

  3. #3
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Si tu as la possibilité de modifier dans ta classeA P2, tu peux également la déclarer en 'private'.

  4. #4
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Je connais bien le fonctionnement général du plymorphisme pour l'utiliser courramment. Mais cela ne répond pas à ma question, même si je te remercie bien sûr d'essayer de m'aider.

    J'ai peut-être oublié de préciser que je n'ai aucune possibilité d'action sur la classe parente A.
    Exemple : je veux hériter d'une classe Label pour créer un UserControl susceptible d'être diffusé par la suite mais sans que par exemple les futurs utilisateurs de mon nouveau contrôle n'ai accès à la propriété AutoSize (simple exemple).

    Autre exemple : remplacer la propriété AutoSize booléenne initiale par une nouvelle AutoSize basée sur une énumération à 3 valeurs.

  5. #5
    Membre averti Avatar de roster
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 397
    Points : 426
    Points
    426
    Par défaut
    Tu peux utiliser par exemple dans ta classe fille pour hider P2:

    Cela devrait marcher, non?

  6. #6
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Si tu déclare ta méthode public, elle ne sera évidemment pas cachée. Et si la version parente située dans A était public ou protected, tu ne pourras pas la redéclarer private dans la classe héritée pour la cacher. Je sèche...

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    si tu hérites d'une classe qui a des propriétés publiques, il te sera impossible de les rendre indisponibles dans l'héritant, ça tu le sais

    Maintenant, si tu souhaites faire "disparaitre" du designer des propriétés, cela est possible en modifiant l'attribut d'une propriété (de son accesseur get/set).
    Pour faire ainsi, il te faut faire de la reflection et obtenir si l'attribut browsable est declaré sa valeur pour la basculer à false. Ainsi, tu vas rendre indisponible cette propriété au niveau du designer. Par contre, elle sera , et tu sais bien que c'est la logique objet d'héritage, toujours accessible par code. Mais au moins, tu l'auras masqué pour un userControl dans le designer
    (d'ailleurs, certaines propriétés de controles microsoft ne sont pas visibles au designer alors qu'elles existent)... Après, je crois que tu peux aussi "cacher" des propriétés par rapport à l'intellisense, mais ça, j'ai encore jamais eu besoin de le faire, donc j'ignore la technique pour le faire !!!!

  8. #8
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 86
    Points
    86
    Par défaut
    Merci pour cette réponse qui malheureusement tend à confirmer mes craintes (en même j'ai conscience d'essayer de faire quelquechose un peu en dehors des clous).

    Pour ce qui est du designer il y a aussi l'attribut Browsable qui permet de faire ça je crois.
    Mais c'est justement plus côté intellisense que j'aurais voulu avoir des infos (ne serait-ce que savoir si c'est possible).

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/04/2013, 12h45
  2. Réponses: 3
    Dernier message: 28/01/2010, 14h55
  3. Réponses: 2
    Dernier message: 22/10/2008, 23h44
  4. Réponses: 2
    Dernier message: 20/07/2007, 08h35
  5. Réponses: 6
    Dernier message: 11/07/2007, 16h50

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