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

C# Discussion :

Communication entre classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut Communication entre classe
    Bonjour à tous,

    J'ai un problème qui me taquine depuis un moment, mais que je mets tjr un peu de coté n'ayant pas trouvé la solution.

    Pour vous montrez un peux mon projet j'ai deux classes:
    Nom : diagramme.jpg
Affichages : 180
Taille : 19,7 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public partial class Program
        {
            // This method is run when the mainboard is powered up or reset.   
            void ProgramStarted()
            {
                //statusVoiture ETATVOITURE;
                Debug.Print("Program Started");
                CVoitureSD voiture = new CVoitureSD();
                CCarteSD carteSD = new CCarteSD();
     
            }
        }
    CVoitureSD qui rempli une structure
    et
    CCarteSD qui doit écrire les valeur de la structure dans une carte Sd

    Mon problème étant que je déclare la structure statusVoiture dans la classe CVoitureSD mais je ne sais pas comment "l'envoyer" dans la classe CCarteSD.
    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
     
    Class CVoitureSD
        {
            private statusVoiture m_etat;
            GT.Timer m_timerCalculs;
            public CVoitureSD()
            {
     
     
                m_timerCalculs = new GT.Timer(3 * 1000);
                m_timerCalculs.Tick += m_timerCalculs_Tick;
                m_timerCalculs.Start();
            }
     
            void m_timerCalculs_Tick(GT.Timer timer)
            {
                m_etat.m_vitesseProgrammeeMoteur = 5;
                m_etat.m_vitesseReelleMoteur = 4;
     
            }
     
        public struct statusVoiture
        {
            // information protocole :
            public ushort m_vitesseProgrammeeMoteur;
            public ushort m_vitesseReelleMoteur;
        }
    ici pour simplifier j'ai un Timer qui vient tout les 3 secondes changer les valeurs de la structure ( ici c'est toujours la même mais c'est un exemple)

    Et en gros je veux envoyer la struct m_etat vers la class CCarteSD
    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
     
    class CCarteSD
        {
     
            GT.Timer m_timerCopieEtatSD;
            const int periode = 5;//5 secondes
            statusVoiture m_donnees;
            public CCarteSD()
            {
     
     
                m_timerCopieEtatSD = new GT.Timer(periode * 1000);
                m_timerCopieEtatSD.Tick += m_timerCopieEtatSD_Tick;
                m_timerCopieEtatSD.Start();
            }
     
    void m_timerCopieEtatSD_Tick(GT.Timer timer)
            {
     
                writeXML(m_etat);  //BON LA ÉVIDEMMENT CA MARCHE PAS  MAIS C'EST ici que je voudrais que la structure m_etat de la classe CVoitureSD arrive pour écrire avec la méthode writteXML()
             }
    public void writeXML(statusVoiture m_donnees)
            {
                    //je vous épargne tout ça :)
     
            }
    J'ai essayé la structure en référence mais je sais pas trop j'ai pas trop réussi.

    Car j'ai un autre soucis dans la classe CVoitureSD les valeurs de la structure change toutes les 3 secondes donc il faut grosso modo que je mets a jour la structure de la CCarteSD qui doit copié tout les 5 secondes sur les info de cette structure.



    Bon je vais arrêter de tartiner mon problème je vous expliquerais précisément les point que vous ne comprenez pas.

    J’espère que vous allez pouvoir m'aider ça fait bien 3 mois j'ai ce problème et la je sature Help me please

    Bonne journée a vous et merci a ce qui on prit le temps de lire tout ça.

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    et pourquoi ne pas avoir un membre CCarteSD dans la voiture !!

    Comme ça, dans ton timer, tu pourras toujours passer à une méthode de CCarteSD l'instance de la structure que tu veux lui faire traiter.

    Franchement, je ne vois pas de difficulté dans ton "architecture".

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut
    Déjà merci de ta réponse theMonz31,

    quand tu dis "un membre CCarteSD dans la voiture" tu parles de déclarer CCarteSD dans CVoiture ?

    En faite j'y ai pensé mais CVoiture s'occupe en réalité que de la vitesse ( faut d'ailleurs que je renomme la classe) et même si je faisait cela comme j'ai une classe radio que j'ai pas représenter mais qui fait grosso-modo la même chose elle doit récupérer les info de la structure et les envoyer a intervalle régulier du coup si je fais un membre CCarteSD dans CVoiture je me retrouve avec le même problème pour la radio.

    En vrai la radio c'est pas un problème mais j'ai d'autre classe (GPS, Accelormetre,..) qui elles aussi ont des structures que je dois "copié" dans CCarteSD du coup je ne pas déclarer CCartesd partout en même temps ou alors je n'ai pas compris ta définition de membre.

    Une autre idée ?
    est ce que passé la structure en référence c'est possible mais est ce que la structure peut se mettre a jour tout les 3 secondes dans les autre classes ?
    si oui comment??

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    tu aurais un truc du genre:

    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
     
    class voiture
    {
         CarteSD mySDCarte;
         GPS myGPS;
         Accelerometer myAcc;
     
         // et dans ton code....
         public void SaveData()
         {
                   mySDCarte.Save(myGPS);
                   mySDCarte.Save(myAcc);
                   // etc...
          }
    }
    Ca t'irait pas ça ?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Par défaut
    J'aurai mis la gestion des timers dans Program.cs et pas dans les classes en elles-mêmes.

    Après, avec un peu plus d'explications fonctionnelles, la communauté serait plus à même de faire une analyse plus complète de la chose

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2015
    Messages : 10
    Par défaut
    Bonsoir,

    merci grâce à tout vos conseillés j'ai trouvé une petite solution. je vais quand même la posté au cas ou elle soit bancale, je l'ai simplifié bien évidement pour quelle reste courte mais bon voila l'idée.
    main:
    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
     
    class Program
        {
            static public Cvoiture voiture;
            static public Csd sd;
            static public Cgps gps;
            static public Cradio radio;
     
            static statut etatMain;
            static statutGPS etatGps;
     
            static void Main(string[] args)
            {
                //statut etatMain = new statut();
                etatMain = new statut();
                etatGps = new statutGPS();
     
                voiture = new Cvoiture();
                gps = new Cgps();
                sd = new Csd();
                radio = new Cradio();
     
                voiture.save(ref etatMain);
                gps.save(ref etatGps);
                sd.writeSD(etatMain, etatGps);
                radio.envoieRadio(etatMain, etatGps);
     
            }
    Cvoiture enfin pour etre plus précis Croue
    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
     
    public class Croue
        {
            statut etatVoiture;
            public Croue()
            {
                /* en gros je donne une vitesse "à la main je la stocke dans la structure*/
     
                Console.Write("Vitesse: ");
                etatVoiture.vitesse = Convert.ToInt32(Console.ReadLine());
     
                Console.Write("Tour: ");
                etatVoiture.tour = Convert.ToInt32(Console.ReadLine());
            }
            public void save(ref statut maman) //pas d'inspi
            {
                maman= etatVoiture;
            }
        }
        public struct statut
        {
            public int vitesse;
            public int tour;
        }
    Cgps
    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
     
    class Cgps
            {
            statutGPS etatGPS;
            public Cgps()
            {
    /*pareil que pour Croue*/
                Console.Write("position: ");
                etatGPS.position = Convert.ToInt32(Console.ReadLine());
     
                Console.Write("degres: ");
                etatGPS.degres = Convert.ToInt32(Console.ReadLine());
            }
            public void save(ref statutGPS tamere)
            {
                tamere = etatGPS;
            }
        }
        public struct statutGPS
        {
            public int position;
            public int degres;
     
     
        }
    CcarteSd
    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
     
    class Csd
        {
            public Csd()
            {
     
            }
            public void writeSD(statut etatSD,statutGPS etatGpsSd)
            {
    /*je recupere dans le main les structure que je passe en parametre et je me sers de la structure*/
                Console.WriteLine("vitesse copié sur la SD carte : " + etatSD.vitesse.ToString());
                Console.WriteLine("tour copié sur la SD carte : " + etatSD.tour.ToString());
                Console.WriteLine("degres copié sur la SD carte : " + etatGpsSd.degres.ToString());
                Console.WriteLine("position copié sur la SD carte : " + etatGpsSd.position.ToString());
            }
        }
    et pour Cradio c'est la même chose que CcarteSD

    Dans le main je me suis pas cassé la tête mais dans mon programme j'ai écouté le conseil de "casiii " et j'ai mis des timers dans le main.

    Voila voila en rajoutant tout mon petit attirail à cette base j'ai réussi a tout faire fonctionner.

    Merci

Discussions similaires

  1. Communication entre classes
    Par sunshine33 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 03/02/2010, 21h04
  2. communication entre classes
    Par milomar dans le forum C++
    Réponses: 6
    Dernier message: 02/03/2008, 11h59
  3. Communication entre classes
    Par matteli dans le forum C++
    Réponses: 6
    Dernier message: 25/02/2008, 11h45
  4. Problème de communication entre classe
    Par FabaCoeur dans le forum Général Java
    Réponses: 4
    Dernier message: 22/01/2008, 13h50
  5. [c#] probléme de communication entre classe
    Par OpenGG dans le forum C#
    Réponses: 1
    Dernier message: 24/09/2006, 21h54

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