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.
93 lines
3.7 KiB
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;
|
|
}
|
|
}
|
|
}
|