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

[Résolu]
Signaler
Messages postés
3
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
9 décembre 2010
-
Messages postés
3
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
9 décembre 2010
-
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

Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
8
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)
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
8
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
c'est pas Sealed ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
8
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.
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
8
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
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
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
Messages postés
14821
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 septembre 2021
156
Bonjour,

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

Mon site
Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
8
@NHenry > Il est vrai qu'utiliser l'exception NotImplementedException sera plus judicieux que mon pauvre message. C'était juste un exemple.
Messages postés
3
Date d'inscription
samedi 24 mai 2003
Statut
Membre
Dernière intervention
9 décembre 2010

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.