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

Dotnet Discussion :

[POO] Faire rendre invisible une classe dans un formulaire


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 43
    Par défaut [POO] Faire rendre invisible une classe dans un formulaire
    Bonjour,

    J'ai un problème simple, qui est général en POO (C#, VB.Net, C++, etc.). J'ai une classe ID (identifiant unique de chaque objet) avec un membre id qui sert juste à "nourrir" les classes héritantes (Personne, voiture, Chambre, etc.). Donc elle est inutile dans mes vues/formulaires. Aussi je voudrais la rendre invisible (pour que mon code soit plus propre). Voici le code en VB.Net (rien de plus classique) :

    Public Class ClasseID
    private _id As Integer

    Public Property id() As Integer
    Get
    Return _id
    End Get
    Set(ByVal value As Integer)
    _id = value
    End Set
    End Property

    (pas de constructeur)
    End Class

    Public Class Bidule
    inherits ClasseId
    (...)
    end class

    J'ai réussi en partie à résoudre mon problème comme ceci :

    Public Class ClasseID
    Friend _id As Integer
    End Class


    Ainsi dans mes formulaires ou un test de console, un objID.id n'est plus possible, mais on peut toujours faire :

    dim objID as classeID

    J'aimerais que classeID disparaisse des déclarations. Alors, j'ai fait un :

    Friend Class ClasseID
    Friend _id As Integer
    End Class

    Mais, mes classes héritantes grognent ! (erreurs)

    J'espère que je me suis fait comprendre. En une phrase, je veux que ma ClasseID serve juste pour les classes héritantes, mais en dehors (formulaire, console), qu'elle n'apparaisse plus dans les déclarations (car inutile)

    Désolé pour ce message long, mais je pense que la(les) réponse(s) (si vous souhaitez répondre) sera(seront) plus courte(s)

  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 : 44
    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
    Par défaut
    déclare _id en tant que Protected
    comme ça ce n'est pas accessible par le code externe à la classe, mais les classes héritées peuvent y accéder

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 43
    Par défaut
    Je te remercie pour l'info. Après il faudra que je regarde la différence entre protected et friend, car avec ce dernier ça marche aussi comme tu l'as dit.

    Et pour la classe pour qu'elle n'apparaisse pas dans le module de test ou le formulaire, comment je dois m'y prendre ?

  4. #4
    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 : 44
    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
    Par défaut
    La classe de base est obligée d'être au moins aussi visible que ces classes dérivées. Autrement dit, si tu as une classe A, et une classe B qui hérite de A, B ne pourra être publique que si A est publique aussi. De toutes façons, qu'est-ce que ça peut faire que A soit visible ? Rien ne t'oblige à la mentionner explicitement...
    Ou alors j'ai pas compris ton problème...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 43
    Par défaut
    C'était juste pour rendre plus "propre" mon programme. Comme la classe ClassID sert juste à "nourrir" les classes héritantes et rien d'autres, je voulais soustraire celle-ci aux programmes de console ou formulaire. Pourquoi rendre visible dans un formulaire une classe (ID dans mon exemple) qui ne sera jamais instanciée car pas de constructeur ou utilisée via les Get/set ?

    Mais je pense que ce n'est pas la norme. De plus après ce que tu m'as dit dans ton dernier message, ça va compliquer le code plus que l'éclaircir. Je vais remettre ce membre private et rajouter les property Get/set.

    Sinon, question subsidiaire : ça t'arrive/vous arrive souvent de déclarer des membres protected ou friend dans une classe, surtout que celle-ci est contenue avec d'autres classes dans une DLL ? Private est la norme si je puis dire ?

  6. #6
    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 : 44
    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
    Par défaut
    Si ClassID n'est jamais instanciée, déclare là comme abstraite. Mais elle doit forcément être publique, sinon les classes dérivées ne peuvent pas non plus être publiques.

    Sinon, question subsidiaire : ça t'arrive/vous arrive souvent de déclarer des membres protected ou friend dans une classe, surtout que celle-ci est contenue avec d'autres classes dans une DLL ? Private est la norme si je puis dire ?
    Il n'y a pas de "norme", ça dépend de ce que tu veux en faire... perso je n'utilise jamais Friend (ou internal en C#), je trouve que c'est juste une verrue pour pallier une mauvaise conception. En général on peut se débrouiller avec Public/Private/Protected

Discussions similaires

  1. [V8] rendre invisible une colonne dans un tree d'un form
    Par Gandalf24 dans le forum Odoo (ex-OpenERP)
    Réponses: 0
    Dernier message: 23/02/2015, 19h12
  2. [AC-2007] Rendre invisible une boite dans un état d'un formulaire
    Par FewRa dans le forum IHM
    Réponses: 6
    Dernier message: 06/11/2012, 15h43
  3. [A-02] Rendre invisible une ligne dans un Etat
    Par itzik92 dans le forum IHM
    Réponses: 2
    Dernier message: 01/11/2008, 14h48
  4. Réponses: 4
    Dernier message: 10/08/2007, 10h40
  5. Réponses: 4
    Dernier message: 28/11/2006, 00h20

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