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

VB.NET Discussion :

[héritage] supprimer une propriété


Sujet :

VB.NET

  1. #1
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut [héritage] supprimer une propriété
    bonjour
    j'ai une classe qui hérite d'une autre
    et je voudrais supprimer une propriété sur la classe fille
    y a t il une possibilité ?
    (j'ai deja essayé shadows, obsolete, browsable(false), overrides avec rien de dedans mais c'est pas terrible)
    merci
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  2. #2
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Salut,

    Mais c'est quoi l'interet de vouloir supprimer une propriété ? Si tu n'en veux pas, il suffit de ne pas s'en servir... Sinon tu la mets en "Protected" ou en "Shadow" et tu ne la verras pas

    ++
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    c'est pas pour moi
    c'est un objet qui va etre utilisé par d'autres personnes
    donc le but c'est qu'il ne touche surtout pas cette propriété, et donc le mieux c'est qu'ils ne la voient pas
    et sahdows ne fonctionne pas car ca masque juste la propriété du controle mais laisse cette du controle parent
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Il n'est pas possible de masquer complètement une propriété, tu peux au mieux la rendre invisible du designer.
    Il faut bien comprendre qu'essayer de masquer une propriété héritée va à l'encontre du concept même d'héritage.
    Tu peux aussi surcharger la propriété, et déclencher une exception lors de l'écriture dans la propriété avec un message "vous ne devez pas utiliser cette propriété".
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    oui c'est à peu près les bricolages que j'avais fait pour l'instant ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par SaumonAgile
    Il n'est pas possible de masquer complètement une propriété, tu peux au mieux la rendre invisible du designer.
    Il faut bien comprendre qu'essayer de masquer une propriété héritée va à l'encontre du concept même d'héritage.
    Oui c'est ca, generalement quand on herite c'est pour utiliser toutes les propriétés et méthodes de la classe parente. Et "protected" ca marche pas ??

    SInon l'idée de déclancher une exception est bonne mais cela reste du "mauvais code" (bricolage comme tu dis !)
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  7. #7
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le probleme c'est que les propriétés en questions sont déjà héritées dans la classe de base donc je ne peux pas changer leurs portées
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Alors là je suis pas du tout d'accord avec Aspic et Saumon (désolé ) !

    L'héritage ça peut être destiné à ne pas tout réécrire en n'ayant besoin que d'une partie de la class héritée.

    Exemple : j'ai hérité un RichTextBox car c'est trés bien pour la mise en forme du texte mais par contre, je l'ai étendu pour avoir en background un gradient de couleur et une bordure avec des coins arrondis. Donc le Backcolor n'a pour moi que peu d'intérêt puisqu'en fait la couleur est un couple de triplets de couleur (Focus, Mouse on, Standard).
    Donc ça ne me semble pas déconnant de faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <Category("CustomProperty"), Browsable(False), _
        Description("Pas de back color"), _
        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
        Public Shadows Property BackColor() As Color
            Get
                Return Color.Transparent
            End Get
            Set(ByVal value As Color)
                MyBase.BackColor = Color.Transparent
            End Set
        End Property
    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  9. #9
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Pourtant apparement le Shadows ne fonctionne pas...
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  10. #10
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par olsimare
    Bonjour.

    Alors là je suis pas du tout d'accord avec Aspic et Saumon (désolé ) !

    L'héritage ça peut être destiné à ne pas tout réécrire en n'ayant besoin que d'une partie de la class héritée.
    Dans le cas que tu cites comme exemple, il s'agit clairement d'un héritage que je qualifierais de 'par défaut'. Ton objectif est de créer un RichTextBox avec une bordure différente.
    L'idéal serait d'hériter d'un RichTextBox sans bordure ni background, or ce composant n'existe pas à ma connaissance dans le framework. Tu es donc obligé d'hériter d'un objet plus complet qui possède déjà une bordure et un background. Tu es alors obligé de masquer ce qui est en trop.
    Ce n'est plus un héritage au sens conceptuel, c'est surtout la solution la plus rapide pour créer un RichTextBox personnalisé.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  11. #11
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Effectivement, là on est d'accord Saumon, d'ailleurs j'avais commencé en héritant un control (mais ça me gonflait de tout refaire...) ce qui est plus propre.
    Et oui, c'est la recherche de l'efficatité plutôt que de la pureté de conception qui fait la différence dans ce cas.

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    bon j'ai trouvé :
    <ComponentModel.EditorBrowsable(ComponentModel.EditorBrowsableState.Never)>

    additioné avec system.browsable(false) c'est pas trop mal

    la propriété n'est plus proposée en autocomplétion mais elle reste utilisanble (si on la tape ca ne mets pas d'erreur)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. Réponses: 15
    Dernier message: 01/03/2015, 13h16
  2. [Jena] Supprimer le caractère transitif d'une propriété
    Par Keiran dans le forum Frameworks
    Réponses: 3
    Dernier message: 07/06/2012, 09h04
  3. [VB.NET]Héritage : valeur d'une propriété perdue
    Par denilson dans le forum Windows Forms
    Réponses: 1
    Dernier message: 06/07/2006, 11h50
  4. Récupération valeur d'une propriété type TStrings
    Par Stéphane Vaillant dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2003, 11h47
  5. [ActiveX] Visibilité d'une propriété
    Par paradise dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/11/2002, 18h33

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