You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mchsamples-.net-core/ex_029_002_event_standard_p.../Broadcaster.cs

93 lines
3.7 KiB

// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
// marc.chevaldonne.free.fr
//
// Module : Broadcaster.cs
// Author : Marc Chevaldonné
// Creation date : 2016-10-03
//
// ========================================================================
using System;
namespace Broadcaster_Subscriber
{
/// <summary>
/// classe générant l'événement
/// </summary>
public class Broadcaster
{
/// <summary>
/// type délégué de l'événement
/// Cette déclaration peut également être faite en dehors de la classe Broadcaster
/// </summary>
/// <typeparam name="TEventArgs">type des arguments d'événement (C# 2 et plus)</typeparam>
/// <param name="source">la source, c'est-à-dire l'objet qui générera l'événement</param>
/// <param name="e">les arguments d'événement</param>
/// <remarks>Si vous avez plusieurs événements avec différentes implémentations de EventArgs, une seule déclaration de type délégué suffit !
/// Grâce à la généricité, elle vaut pour tous les événements de type EventHandler avec TEventArgs qui s'adpate.
/// CETTE LIGNE EXISTE DEJA ET N'EST DONC PAS NECESSAIRE !!!!</remarks>
//public delegate void EventHandler<TEventArgs>(object source, TEventArgs e) where TEventArgs : EventArgs;
/// <summary>
/// déclaration de l'événement :
/// il est une instance du type délégué précédent, EventHandler, où TEventArgs vaut InfoChangedEventArgs.
/// Le mot clé event garantit qu'il s'agit d'un événement.
/// </summary>
public event EventHandler<InfoChangedEventArgs> InfoChanged;
/// <summary>
/// Cette méthode est celle qu'on appelle lorsqu'on veut lancer l'événement.
/// Elle vérifie d'abord que l'instance de délégué pointe sur au moins une méthode, si c'est le cas, elle génère l'événement.
/// Par convention, cette méthode commence par On... et continue avec le nom de l'événement ...InfoChanged.
/// On la choisit protected virtual pour qu'elle puisse être réimplémentée par les classes filles en général. Mais vous pouvez choisir un autre
/// degré d'accessibilité.
/// </summary>
/// <param name="args">arguments de cet événement</param>
protected virtual void OnInfoChanged(InfoChangedEventArgs args)
{
InfoChanged?.Invoke(this, args);
//la ligne précédente est exactement équivalente à :
//if (InfoChanged != null)
//{
// InfoChanged(this, args);
//}
}
/// <summary>
/// propriété Info
/// </summary>
public string Info
{
get { return mInfo; }
set
{
if (mInfo == value)
{
return;
}
mInfo = value;
//génère l'événement avec des arguments construits à la volée
OnInfoChanged(new InfoChangedEventArgs(value, DateTime.Now));
}
}
string mInfo;
/// <summary>
/// nom du broadcaster
/// </summary>
public readonly string Name;
/// <summary>
/// constructeur
/// </summary>
/// <param name="info">l'info</param>
public Broadcaster(string name, string info)
{
Name = name;
Info = info;
}
}
}