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

VB.NET Discussion :

Accéder à une propriété d'une classe mais pas à la classe qu'elle utilise


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Par défaut Accéder à une propriété d'une classe mais pas à la classe qu'elle utilise
    Bonjour j’ai une question pour rendre une classe imbriquée uniquement accessible via une property.
    Je ne suis pas à l'aise avec la programmation orientée Objet mais je vais tenter de m'expliquer.

    J’ai créé ce type de classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Friend Class Maison
     
         ' je souhaite que cette class ne puisse être exposée et donc appelée que via la property Cette_Fenetre
        Friend Class fenetres_mere
            Sub toto()
            End Sub
        End Class
     
       'on ne doit pouvoir attaquer la classe fenetres_mere qu'à partir de la propriété Cette_Fenetre
        Friend Property Cette_Fenetre As New fenetres_mere
    End Class
    Au final, la propriété Cette_Fenetre fonctionne bien. mais je peux toujours accéder à la classe fenetres_mere

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim test As New Maison
    test.Cette_Fenetre.toto() 'fonctionne bien
    test.fenetres_mere '--> souhaite que cela ne soit pas possible
    Je pense mal m’y prendre. Auriez-vous des conseils ?
    Merci pour votre aide

    Dan

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 974

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Par défaut
    Merci pour ce retour mais c’est précisément le sens de ma question. J’ai joué avec ses paramètres par exemple en mettant ma classe fenetres_mere
    en private et la propriété Cette_Fenetre en Friend.

    Visual Studio affiche une erreur car je ne peux pas exposer ma classe fenetres_mere si elle est en privé. J’ai fait des essais avec Friend protected. J’ai aussi regardé les belles images qui résument le rôle de ces niveaux d’accès mais je sèche - je ne comprends pas tout

    D’où ma question, je pense que je n’utilise pas la bonne méthode

    bonne journée

    Dan

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 84
    Par défaut
    J'ai trouvé une solution. Comme expliqué, jouer avec les niveaux d’accès ne répondaient pas au besoin. La méthode n'était pas bonne. L'implémentation d'une interface permet de rendre la classe interne "invisible" mais dont les instances sont exposées à l’extérieur de la classe..

    J'ai trouvé cette solution sur cette page : https://stackoverflow.com/questions/...nested-classes

    Ils donnent le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Module EntryPoint
        Sub Main()
            Dim OuterClassInstance As New OuterClass
            OuterClassInstance.NestedClassInstance.GetParentX()
        End Sub
    End Module
     
    Public Class OuterClass
        Public X As Integer = 123
        Public NestedClassInstance As ISomeImplementation = New NestedClass(Me)
     
        Private Class NestedClass
            Implements ISomeImplementation
            Private Parent As OuterClass
     
            Public Sub New(ByVal _Parent As OuterClass)
                Parent = _Parent
            End Sub
     
            Public Sub GetParentX() Implements ISomeImplementation.GetParentX
                Debug.WriteLine("X = " & Parent.X.ToString)
            End Sub
        End Class
    End Class
     
    Public Interface ISomeImplementation
        Sub GetParentX()
    End Interface

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

Discussions similaires

  1. [SQL2K] recopier une ligne, mais pas complètement
    Par Monstros Velu dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/10/2006, 12h54
  2. Réponses: 5
    Dernier message: 02/10/2006, 19h24
  3. Réponses: 3
    Dernier message: 14/03/2006, 11h34
  4. Réponses: 4
    Dernier message: 18/01/2006, 14h49
  5. [packages] accéder à une classe suppérieure
    Par EpOnYmE187 dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2005, 21h35

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