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
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
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.
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.
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".
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).
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.
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).
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é.
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.
Partager