Portée de Function dans les classes dérivée

Résolu
cs_anadom Messages postés 3 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 9 décembre 2010 - 30 juil. 2010 à 13:49
cs_anadom Messages postés 3 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 9 décembre 2010 - 2 août 2010 à 08:01
Anadom

Bonjour,

Je souhaiterais savoir s'il est possible de rendre une méthode d'une classe dérivé invisible à la form appelante.
Tout cela sans que la méthode de la classe de base soit invisible à la form appelante.
Je sais s'est pas facile a comprendre d'où l'exemple:

class myClass
Public Function FunctionaRendreInvisibleDansLaBaseQuiEnHérite() as integer

end Function
end class

class HeritéMyClass
Inherits myClass

end class

class form1
dim myClasstest1 as myClass
dim myClasstest2 as HeritéMyClass

ICI JE SOUHAITERAIS QUE:
call myClasstest1.FunctionaRendreInvisibleDansLaBaseQuiEnHérite() soit possible
MAIS QUE:
call myClasstest2.FunctionaRendreInvisibleDansLaBaseQuiEnHérite() soit Impossible

end class


J'ai dejà essayé des combinaisons avec Overrides, Shadows, Alias etc.... mais rien n'y fait...

Je suis un peu perdu, si quelqu'un a une idée...

Merci d'Avance !!!

9 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 juil. 2010 à 20:58
Par contre en poussant un peut, on peut faire :
Public Class Class1

    Public Function Test() As Boolean
        Return True
    End Function

End Class

Public Class Class2
    Inherits Class1

    <Obsolete()> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
    Public Shadows Function Test() As Boolean
        Throw New ApplicationException("Fonction non autorisée")
    End Function

End Class


Comme ca la fonction n'apparait pas au programmeur avec l'IntelliSense pour la classe dérivée et s'il l'ecrit "manuelement" il aura un warning (certe pas une exception mais c'est deja ca, l'exception se produira à l'exécution)
3
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 juil. 2010 à 14:37
Bonjour,

Une technique pour interdire la fonction dans les classes dérivées serait :
Public Class Class1

    Public Function Test() As Boolean
        Return True
    End Function

End Class

Public Class Class2
    Inherits class1

    Public Shadows Function Test() As Boolean
        Throw New ApplicationException("Fonction non autorisée")
    End Function

End Class

Public Class Form1
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim c1 As New Class1
        Dim c2 As New Class2

        Try
            c1.Test()
        Catch ex As Exception
            MsgBox("c1 : " & ex.Message)
        End Try

        Try
            c2.Test()
        Catch ex As Exception
            MsgBox("c2 : " & ex.Message)
        End Try

    End Sub
End Class


Pour le rendre complètement invisible, la comme ca, je n'ai pas d'idée
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 juil. 2010 à 14:48
c'est pas Sealed ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 juil. 2010 à 19:34
Il me semble que Sealed (NotInheritable en VB.NET) ne peut pas s'appliquer à une methode. Uniquement à une classe pour définir une classe abstraite.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 juil. 2010 à 19:37
Oups enorme bétise que je dis. NotInheritable c'est justement l'inverse, c'est pour qu'on ne puisse pas l'utiliser comme classe de base dans un heritage
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
30 juil. 2010 à 20:45
Bonjour,

Je me pose la question du pourquoi tu en as besoin, si tu as besoin de cela car tu as une classe de base devant mettre des membres à dispo uniquement de ses classes enfant, utilises la visibilité "Protected".

(Je répond peut être à coté)

Mon site
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
30 juil. 2010 à 21:41
Bonjour,

Concernant l'exception à réserver dans ce cas, ce ne serait pas NotImplementedException plutôt ?

Mon site
0
foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
30 juil. 2010 à 22:02
@NHenry > Il est vrai qu'utiliser l'exception NotImplementedException sera plus judicieux que mon pauvre message. C'était juste un exemple.
0
cs_anadom Messages postés 3 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 9 décembre 2010
2 août 2010 à 08:01
Anadom

Merci à Tous pour vos Réponses
J'ai utilisé la méthode de foliv57:

  <Obsolete()> _
    <System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _


Elle fonctionne parfaitement et fait exactement ce que je voulais !!!

Encore Merci et bonne prog.
0
Rejoignez-nous