Bonjour.
Je souhaiterai apporter la chose suivante à mon code :
décorer certains events.
Imaginons un classe Alert qui permettent d'associer un Titre à un Event, on pourra ensuite dans une UI permettre à l'utilisateur de choisir à quel event il souhaite s'abonner. De plus on pourra rechercher par reflexion, toutes les Alerte pour n'afficher dans l'UI que les alertes "humainement" interressantes, et non des event bas niveau.
Oui mais mon probleme, c'est que cette technique ne fonctionne pas:
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
29
30
31
32
33
34 public class Alert { private static List<int> s_titresHC = new List<int>(); private String m_titre; public String Titre { get { return m_titre; } } private EventHandler m_event; public event EventHandler Event { add{m_event+= value;} remove { m_event -= value; } } public Alert(String titre, EventHandler evenement) { if (titre == null) throw new ArgumentNullException("titre"); if (titre == String.Empty) throw new ArgumentException("titre cannot be empty"); if (s_titresHC.Contains(titre.GetHashCode())) throw new ApplicationException(String.Format("There is allready an Alert with that Title, change it.\r\nTitle : {0}", titre)); if (evenement == null) throw new ArgumentNullException("evenement"); m_event = evenement; m_titre = titre; s_titresHC.Add(titre.GetHashCode()); } }
Lorsque je construit mon objet Alert, personne n'est abonné à l'event Pret, du coup le constructeur recoit un parametre null.
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 class Program { public static event EventHandler Pret; static void Main(string[] args) { Alert alerte = new Alert("Programme pret", Pret); alerte.Event += new EventHandler(OnPret); if (Pret != null) Pret(null, new EventArgs()); } public static void OnPret(object sender, EventArgs args) { Console.WriteLine("le programme est pret"); } }
Auriez vous des suggestions afin d'atteindre l'objectif?
Peut etre que je fais fausse route, que je ne devrai pas passer par les events, et réinventer la roue avec le pattern observer...??...
Partager