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 :

Passer une classe en parametre de sub erreur


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut Passer une classe en parametre de sub erreur
    Bonjour,

    Je veux lire des objets de type cMotLst(liste d'objet du type cMots(mots en différentes langues))enregistrées par sérialisation dans des fichiers .Bin.
    Voici la classe de base cMotsLst ( Liste d'objets du type cMots)

    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
    
    <Serializable()> Public Class cMotsLst
        Inherits ObservableCollection(Of cMotsLst)
        Public MotLst As New List(Of cMots)
        Public Sub New(ByVal Name As String) 'Nom de classe
            _cMotsLstName = Name
        End Sub
        Public Property cMotsLstName() As String
    End Class
    'Voici la classe cMots contenant des mots en différentes langues
    '**************************************************************
    '*  cMots   :mots  en différentes langues
    '*  cMotLg0 ... cMotLg5=  langues fr,Th,Sc,En,Dt,SP
    '**************************************************************
    <Serializable()> Public Class cMots
        Public Sub New()
        End Sub
        Public Property MotFr() As String
        Public Property MotTh() As String
        Public Property MotThEasy() As String
        Public Property MotThRoman() As String
        Public Property MotSc() As String
        Public Property MotEn() As String
        Public Property MotDt() As String
       etc....
    JE veux relire trois fichiers contenant les données sérialisées
    Je crée trois objets de type cMotsLst
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       MOTAbreviation = New cMotsLst("MOTAbreviation") '
            MOTAdj = New cMotsLst("MOTAdj")
            MOTAdvInterConj = New cMotsLst("MOTAdvInterConj")
    J'ai crée une Sub LitClasseMOT qui prend en paramétre m par référence un objet cMotLst
    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
     Public myFileStream As Stream
        Public Sub LitClasseMOT(ByRef m As cMotsLst)
            Dim dirInfo As New System.IO.DirectoryInfo("../../Lecon/")
            PathLecon = dirInfo.FullName
            Dim s As String
            s = PathLecon & m.cMotsLstName & ".bin"
            Try
                If File.Exists(s) Then
                    Dim myFileStream = File.OpenRead(s)
                    Dim deserializer As New BinaryFormatter()
                    deserializer.AssemblyFormat = Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple
                    m = CType(deserializer.Deserialize(myFileStream), cMotsLst)
                    myFileStream.Close()
                End If
            Catch ex As Exception
                MessageBox.Show("Fichier " & s & " introuvable")
            End Try
        End Sub
    Lorsque je veux lire un fichier binaire et le mettre dans l'objet MOTAbreviation
    je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LitClasseMOT(MOTAbreviation)
    LE fonction lit les données dans m.lstmot (vu par Debug) mais MOTAbreviation.lstMot n'est pas modifiée
    Pourtant la référence de l'objet est la même.

    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Je vois plusieurs problèmes à votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Class cMotsLst
        Inherits ObservableCollection(Of cMotsLst)
    Création d'une classe héritant d'une collection d'elle même ...? Ce serait plutôt un héritage d'une collection de cMots non ?
    Dans ce cas, le champ public MotLst devient inutile puisque la classe elle-même est une collection de cMots.

    Deuxième point :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MOTAbreviation = New cMotsLst("MOTAbreviation")
    LitClasseMOT(MOTAbreviation)
    La méthode LitClasseMOT va instancier MOTAbreviation... La première instanciation sera donc perdue. Pourquoi ne pas faire une fonction qui retournerai un cMotsLst (merci le Garbage collector) ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    J'ai enlevé la redondance des list
    Mais je ne savais pas que par référence l'objet était instancié. Je pensais qu'en passant l'adresse de l'objet à la sub ou fonction on travaillait sur l'objet lui même.

    Je vous remercie .

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Citation Envoyé par Thierry2008 Voir le message
    Mais je ne savais pas que par référence l'objet était instancié. Je pensais qu'en passant l'adresse de l'objet à la sub ou fonction on travaillait sur l'objet lui même.
    Ah non, ce n'est pas ce que j'ai dit ! Effectivement, en passant la référence de l'objet on travaille bien sur l'objet lui-même. Ce n'est pas ça qui crée l'instance, c'est la méthode appelé au moment de l'affectation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m = CType(deserializer.Deserialize(myFileStream), cMotsLst)
    Avant l'appel de la méthode, il faut initialiser la variable avec Nothing, sinon le compilateur râle...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 21
    Points : 23
    Points
    23
    Par défaut
    Désolé.C'est moi qui vous ai mal compris.Je suis prof d"électronique et je patauge dans les méandres des classes .Net

    Mes questions sont niveau 0.
    J'ai lu pas mal sur la P.O.O " les classes animeaux,chien... comme exemple " mais ça n'aide pas beaucoup pour décrypter les classes
    en .Net
    SI vous connaissez un bon livre .je suis preneur .


    Merci encore de m'avoir aidé

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

Discussions similaires

  1. Comment passer une classe en parametre ?
    Par Jammye dans le forum Langage
    Réponses: 2
    Dernier message: 22/10/2012, 13h07
  2. passer une textbox en parametre d'une procedure sub
    Par gilles_906 dans le forum VB.NET
    Réponses: 3
    Dernier message: 02/04/2011, 15h11
  3. passer une classe comme parametre d'une fonction
    Par antoine dpt dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/07/2009, 13h10
  4. Passer une classe en parametre
    Par kitiara999 dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2006, 14h06
  5. Passer une séquence en parametre
    Par djousss dans le forum CORBA
    Réponses: 2
    Dernier message: 02/12/2003, 22h39

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