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 :

Rendre une méthode de la classe mère inaccessible


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Par défaut Rendre une méthode de la classe mère inaccessible
    J'ai une classe mère à laquelle je ne peux pas toucher avec un méthode toute pourrie.
    Je voudrais, par sûreté, rendre cette méthode inaccessible à partir des classes filles que je vais écrire.

    Y - a - t - il un moyen ?

    merci

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    C'est pas super précis... En gros t'as une classe A avec une méthode (publique ?) M ; et une class B qui hérite de A.
    Une instance de B étant une instance de A, elle a toutes les méthodes de A. Donc non, c'est pas possible.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Par défaut
    Ok mais A peut choisir de rendre certaines de ces méthodes invisibles aux autres classes (avec private par exemple).

    Donc oui la méthode est public en A mais j'aimerai qu'elle ne le soit pas en B.

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Pas possible. Une instance de B est une instance de A, donc une instance de B doit pouvoir faire tout ce qu'une instance de A peut faire, y compris proposer l'appel de ta méthode "pourrie".

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par piotrr Voir le message
    Ok mais A peut choisir de rendre certaines de ces méthodes invisibles aux autres classes (avec private par exemple).

    Donc oui la méthode est public en A mais j'aimerai qu'elle ne le soit pas en B.
    Faudrait savoir : tu dis plus haut que tu ne peux pas toucher à ta classe A.

    Et une méthode publique, ben ... c'est une méthode publique; il n'y a pas de "public restreint". (et c'est logique).

    Au demeurant, on arrive à faire l'inverse, rendre publique entre deux assemblies des méthodes internal (avec un atttribut particulier de l'assembly).

  6. #6
    Membre expérimenté

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 215
    Par défaut
    Tu peux tester (avec this.getType().ToString()) la classe de l'objet qui appelle la méthode, pour empêcher qu'elle s'exécute pour un objet qui ne serait pas de la classe de base.

    Tu peux aussi mettre des commentaires /// qui apparaîtront dans la documentation de la méthode, et y expliquer que cette méthode ne fonctionne que pour la classe de base.

    Mais tu ne pourras pas empêcher que la méthode soit visible dans les classes héritées.

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par michel.bosseaux Voir le message
    Tu peux tester (avec this.getType().ToString()) la classe de l'objet qui appelle la méthode, pour empêcher qu'elle s'exécute pour un objet qui ne serait pas de la classe de base..
    Il a dit qu'il ne voulait pas toucher à la classe en question; de manière externe il n'existe (logiquement) pas de solution (le contraire serait un comble si on pouvait modifier la visibilité des éléments d'un objet de manière externe à cet object - la demande est quand même curieuse).

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    726
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 726
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Faudrait savoir : tu dis plus haut que tu ne peux pas toucher à ta classe A.

    Et une méthode publique, ben ... c'est une méthode publique; il n'y a pas de "public restreint". (et c'est logique).
    Je n'a pas accès au code de la classe A.

    J'ai exprès hérité cette classe pour pouvoir utiliser mes propres objets avec uniquement les méthodes dont j'ai besoin.

    Parce qu'il y a beaucoup de choses dans la classe mère mais tout n'es pas utile pour les futurs utilisateurs.

    Donc j'aimerai fournir des classes personnalisées par mes soins et rendre uniquement accessibles les méthodes et les propriétés que j'aurai décidé.

  9. #9
    Membre chevronné
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Par défaut
    Ce que tu veux faire est possible, mais il te faut utiliser la composition et non l'héritage :

    Ta classe B utilise un membre privé A. Pour chacune des méthodes de A que tu veux exposer, tu définis une méthode dans B qui appelle celle de A.
    De cette manière, toutes les méthodes que tu souhaites exposer le sont, et celles que tu veux masquer sont invisibles puisque A est un membre privé de B.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/07/2009, 08h13
  2. [WPF] appeler une méthode de la classe "parente"
    Par Invité dans le forum Framework .NET
    Réponses: 3
    Dernier message: 19/10/2007, 09h44
  3. Attacher un évènement à une méthode de la classe courante
    Par hush dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/06/2007, 00h40
  4. Réponses: 6
    Dernier message: 25/04/2007, 18h07
  5. Réponses: 3
    Dernier message: 15/12/2006, 16h14

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