Partage
  • Partager sur Facebook
  • Partager sur Twitter

Accéder aux attributs d'une classe à partir d'une autre

Sujet résolu
    20 juin 2011 à 18:56:32

    Bonjour,


    C'était une simple erreur d'innatention, il n'y avait pas de réel problème.
    Voir mon dernier post.



    Comme indiqué dans le titre, je souhaite accéder aux attributs privés d'une classe (appelons la Form1) à partir d'une autre classe (appelons la Test).

    J'ai donc quelque chose comme :
    Public Class Form1
        Private _sdzIsGood As Boolean = True
    
    
        Public ReadOnly Property SdzIsGood() As Boolean
            Get
                Return _sdzIsGood
            End Get
        End Property
    
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            _sdzIsGood = False 'Ce qui est totalement faux
            Dim monTest As New Test()
        End Sub
    End Class
    
    
    
    Public Class Test
        Public Sub New()
            MessageBox.Show(Form1.SdzIsGood) 'Renvoie True
        End Sub
    End Class
    


    En même temps, je trouve ça assez logique que ça prenne la valeur par défaut... En faisant Form1.SdzIsGood, on fait appel à la classe de "base" (au passage, comment dit-on ? classe "non-instanciée" ?) et non à la classe instanciée...


    Donc, comment puis-je faire pour que je puisse accéder aux attributs de ma classe Form1 par ma classe Test ?



    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      20 juin 2011 à 19:39:16

      Les proprietes readOnly ne peuvent recevoir une valeur que lors de leur initialisation ou dans le constructeur il me semble.

      C'est donc normal que _sdzIsGood soit toujours = true.

      Pour y acceder tu dois creer une instance de Form1 puis acceder a la propriete comme tu le fais :
      Form1 form = new Form1;
      bool maBool = form._sdzIsGood;
      
      • Partager sur Facebook
      • Partager sur Twitter
        20 juin 2011 à 21:08:20

        Non, les propriétés renvoient la valeur de la variable quand on les appellent :
        Public Class Form1
            Private _testVar As String = Nothing
        
            Public ReadOnly Property TestVar() As String
                Get
                    Return _testVar
                End Get
            End Property
        
        
            Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                _testVar = "haha"
                MessageBox.Show(TestVar) 'Renvoie "haha"
            End Sub
        
            Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                _testVar = "huhu"
                MessageBox.Show(TestVar) 'Renvoie "huhu"
            End Sub
        End Class
        



        Le code du formulaire de démarrage s'exécute quand le programme se lance, et après, je fais quoi ?
        J'ai bien essayé de passer un Me (ou this puisque tu programmes en C# apparemment) en paramètre du constructeur de la classe avec laquelle je veux récupérer la valeur des variables, mais quand j'essaie par exemple :
        Public Class Form1
            Private _sdzIsGood As Boolean = True
        
        
            Public ReadOnly Property SdzIsGood() As Boolean
                Get
                    Return _sdzIsGood
                End Get
            End Property
        
        
            Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
                _sdzIsGood = False 'Ce qui est totalement faux
                Dim monTest As New Test(Me)
            End Sub
        End Class
        
        
        
        Public Class Test
            Public Sub New(ByVal monForm1 As Form1)
                MessageBox.Show(monForm1.SdzIsGood) 'Erreur
            End Sub
        End Class
        


        J'ai une erreur du genre :
        What tha fack, ça fonctionne :-° . J'étais pourant sûr d'avoir testé et d'avoir eu une erreur...

        Quel imbécile je suis ! Ça fonctionne très bien, c'est juste quand dans mon vrai projet, j'avais oublié de passer l'argument de mon constructeur à ma variable de classe. Et comme j'utilisais ensuite ma variable de classe, et bien forcément, puisque qu'au début elle ne valait rien, j'avais une NullReferenceException.

        C'était une simple erreur d'innatention, juste une ligne oubliée :-° . Désolé pour le dérangement !
        • Partager sur Facebook
        • Partager sur Twitter

        Accéder aux attributs d'une classe à partir d'une autre

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown