Masque une methode dans la classe fille

Messages postés
23
Date d'inscription
mardi 15 juin 2004
Statut
Membre
Dernière intervention
23 mai 2008
- - Dernière réponse : Kevin.Ory
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
- 23 mai 2008 à 20:38
Hey hey les gens,

Ben je ne sais pas si c'est possible ce que je demande, j'ai bien chercher sur google et ya pas de resultat ou les mots clé n'était pas bons.

Bref, je me lance, J'ai une classe B qui herite d'une classe A

class A

public function fct1() as integer
public function fct2() as integer
public function fct3() as integer

end class
 -------------------
class B
inherits A

end class

Donc j'utilise la classe A dans mon programme (c'est l'existant), ce que je veux c'est de masquer la fct2 des instances de la classe B ou la rendre privé. 
ex:

class B
inherits A

masquer function fct2() as integer

end class

je suis preneur de toute proposition  
merci bcp pour la lecture ;)
Afficher la suite 

4 réponses

Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
Salut,

Tu ne peux pas cacher la fonction d'une classe hérité, mais tu peux la rendre inutilisable:

        Public Shadows Function FuncA() As Integer
            Throw New Exception("Cette fonction n'est pas implémenté")
        End Function
Commenter la réponse de Kevin.Ory
Messages postés
23
Date d'inscription
mardi 15 juin 2004
Statut
Membre
Dernière intervention
23 mai 2008
0
Merci
Hey

Le mot clé Shadows sert a cassé l'héritage, mais la fonction sera tjr visible depuis l'exterieur, et elle va generer une exception !!

Le but de vouloir la caché est que je fabriques des dll pour des user qui ne doive pas savoir le code source, peut etre ils serons confu

g detourné le probleme :

class base
   function 1
   function 3
end class

class A
inherits base
   function 2
end class

class B
inherits base
end class

mais moi je penser que y'avai un truc pour caché ;)

Merci en tout cas
 
cheers,
Commenter la réponse de waguila666
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
Mouais tout dépend le contexte....

Par exemple, si tu veux créer une classe sans constructeur qui sera instanciable que par l'appel d'une de tes procédure, tu peux créer une classe de base MustInherits ou une interface (dépend du contexte, encore une fois). Dans ta fonction, tu utilise une classe dérivé (ou implémentant l'interface) pour créer l'instance:

Public Interface Machin      ' Visible depuis l'extérieur
    Public Property Propriété
    Public Function Fonction
End Interface

Private Class MonMachin   ' Seulement en interne
    Implements Machin
    Public Property Propriété
    Public Function Fonction
    Public Function AutreFonction   '  Fonction seulement disponible en interne
End Class

Et ta fonction qui instancie Machin:

Public Function GetMachin As Machin
    Return New MonMachin
End Function

Tu peux aussi partager tes données entre les niveaux d'héritages avec des variables Protected.
 Mais des variables Protected pourront être accessibles depuis l'extérieur si on hérite de cette classe, il faut déclarer la classe NotHeritable pour éviter cela.

Il faut dire plus exactement ce que tu veux pour avoir une réponse plus précise ;)
A+
Commenter la réponse de Kevin.Ory
Messages postés
843
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
5
0
Merci
Mais si je reprend ce que tu as dis, c'est effectivement comme ça qu'il faut faire:

Public class base      ' Classe visible pour tout le monde
    Protected MaValeur
    Public Property Valeur
          Return MaValeur
    End Property
end class

Private class A     ' Classe privé qui ajoute la fonction 2
inherits base
    Public Sub SetValeur(Valeur)
          MaValeur=Valeur
    End Sub
end class

Ici par exemple, une fonction de la classe privé va initialiser une variable qui sera reprise par la propriété de la classe publique. Mais pour passer des données de ta classe A à ta classe de base, il faut utiliser des variables Protected (déclaré dans ta classe de base), mais celle-ci seront accessible par tout autre classe dérivant de ta classe de base.

Sinon, la 3ème variante, c'est de déclarer tes fonctions et propriété de la classe de base Overridable puis de faire des Overrides dans ta classe dérivé privé. Ceci permet en qq sort de modifier le fonctionnement de tes functions de la classe de base lorsque tu instancie ta classe a partir de la classe privé. (j'espère avoir été assez clair )

Si tu veux plus de détails, n'hésite pas
Commenter la réponse de Kevin.Ory