Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Instance anonyme : accéder aux membres ?

Sujet résolu
    1 mai 2019 à 3:25:26

    Bonjour,

    Je suis dans les cours sur la POO en C# et pour le TP sur le simulateur météo, pour lequel mon code marche très bien par ailleurs, je souhaitais simplifier l'écriture. Pour le moment j'ai :

    static void Main(string[] args)
    {
        WeatherStats stats = new WeatherStats();
    
        MeteoSim sim = new MeteoSim();
        sim.ChangeWeatherEvent += stats.WeatherHasChanged;
        sim.SunnyWeatherEvent += stats.AddSunnyDay;
    
        stats.DrawStats(365);
    }



    Je souhaiterais ne pas stocker mon instance et donc écrire directement :

    static void Main(string[] args)
    {
        WeatherStats stats = new WeatherStats();
    
        new MeteoSim
        {
            ChangeWeatherEvent += stats.WeatherHasChanged;
            SunnyWeatherEvent += stats.AddSunnyDay;
        };
    
        stats.DrawStats(365);
    }


    Mais VS me retourne comme erreur que "ChangeWeatherEvent" n'existe pas dans le contexte actuel. Je ne trouve rien sur les "instances anonymes", toutes mes recherches m'emmènent vers les types anonymes. Pour les propriétés pas de problème, je peux les initialiser, mon problème dans ce code ne concerne que les events (qui ne sont pas statiques, et qui sont publics). Est-ce possible de faire ce que je veux ? Qu'est-ce que j'ai oublié ?

    Merci.

    -
    Edité par galactose 1 mai 2019 à 3:30:36

    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2019 à 14:09:08

      J'ai du mal à comprendre votre objectif, concrètement.

      Vous voulez des "Event" dans une instance de classe anonyme, mais vous ne pouvez pas spécifier de méthodes, alors QUAND-est-ce que ces évènements se déclencheront ???

      C'est quoi votre objectif, en vrai, à part planquer des globales dans autres chose que des statiques ?

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        2 mai 2019 à 16:01:23

        Salut !

        Ce n'est pas un objectif ou un besoin en soi, c'est juste pour comprendre pourquoi j'ai cette limitation avec les évènements.

        En fait je crois que vous avez donné la réponse, ou en tout cas exposé une logique à laquelle je n'avais pas pensé en écrivant ce bout de code (trop concentré sur le problème que je rencontrais, je n'avais pas écrit le code jusqu'au bout, il manque dans mon exemple la ligne sim.StartSimulation(365); pour simuler la météo sur 1 an et déclencher les évènements) : en créant une instance anonyme, je ne peux effectivement pas appeler de méthode déclenchant l'event... Et j'imagine qu'en appelant une telle méthode dans le constructeur, l'événement sera déclenché avant les éventuels abonnements.

        Du coup merci car je ne sais pas si c'était volontaire, mais c'est plus clair ^^

        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2019 à 9:56:29

          Même si ça sert pas à grand chose rien n'empêche d'écrire ceci (et ainsi de se passer d'une variable explicite, par contre y'a rien "d'anonyme" dans l'histoire ou j'ai pas pigé)

          new MeteoSim {
              ChangeWeatherEvent += stats.WeatherHasChanged;
              SunnyWeatherEvent += stats.AddSunnyDay;
          }.StartSimulation (365);



          • Partager sur Facebook
          • Partager sur Twitter
          Censément, quelqu'un de sensé est censé s'exprimer sensément.

          [C#] Instance anonyme : accéder aux membres ?

          × 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