Home
Browsez les 647 exemples
Téléchargez les 647 exemples
Téléchargez des chapitres
Achetez sur amazon.fr
Niveau: Débutant/Intermédiaire
ISBN-2-84177-339-6
50 Euros
|
Exemple 11-19 extrait du chapitre Notions de classe et d'objet
Exemple 11-18< > Exemple 11-20
Cet exemple peut être compilé avec la ligne de commande: csc.exe /target:exe Exemple_11_19.cs Erreurs: 0 Avertissements: 0 Remarque:
Exemple_11_19.cs
using System;
class Abonne{
private string m_Nom;
public Abonne( string Nom ) { m_Nom = Nom; }
// Méthode à appeler lorsqu'un événement est déclenché
// (i.e lorsqu'un bulletin d'information est publié).
public void ReceptionInfo(object sender, EventArgs e){
InfoEventArgs Info = e as InfoEventArgs;
if( Info!= null ){
Console.WriteLine( m_Nom + " reçoit l'info: " +
((InfoEventArgs)e).GetBulletinInfo() );
}
}
}
//La classe d'argument de l'événement bulletin d'information.
class InfoEventArgs: EventArgs{
private string m_Description;
public string GetBulletinInfo() { return m_Description; }
public InfoEventArgs (string description)
{ m_Description = description; }
}
// Définition du type délégué 'handler d'un bulletin d'information'.
public delegate void InfoEventHandler(object sender, EventArgs e);
// Classe contenant les événements bulletin d'information.
class AgenceDePresse{
// Définition des événements bulletins d'information.
public event InfoEventHandler InfoFrance;
public event InfoEventHandler InfoMonde;
// Méthodes de déclenchement des événements
// (i.e de publication de bulletin d'information).
// Méthodes de déclenchement des événements
// (i.e de publication de bulletin d'information).
public void OnInfoFrance(InfoEventArgs BulletinInfo){
if( InfoFrance != null ){
Delegate[] abonnes = InfoFrance.GetInvocationList();
foreach(Delegate _abonne in abonnes ){
InfoEventHandler abonne = (InfoEventHandler) _abonne;
abonne.BeginInvoke(this,BulletinInfo,null,null);
}
// Attend un peu pour permettre les exécutions asynchrones
// celles ci se faisant sur des threads du pool,
// qui sont de threads background. Sans cet artifice,
// les threads du pool n'auraient pas le temps de commencer
// leur travail que le programme serait déjà fini.
System.Threading.Thread.Sleep(100);
}
}
public void OnInfoMonde(InfoEventArgs BulletinInfo){
if( InfoMonde != null )
InfoMonde(this,BulletinInfo);
}
}
class Program {
public static void Main(){
// Création de l'agence de presse.
AgenceDePresse afp = new AgenceDePresse ();
// Création des abonnés.
Abonne raymond = new Abonne("Raymond");
Abonne olivier = new Abonne("Olivier");
Abonne mathieu = new Abonne("Mathieu");
// Création des abonnements aux événements bulletins d'info.
afp.InfoFrance += raymond.ReceptionInfo;
afp.InfoFrance += olivier.ReceptionInfo;
afp.InfoMonde += olivier.ReceptionInfo;
afp.InfoMonde += mathieu.ReceptionInfo;
// Publication de bulletins d'information
// (déclenchement des événement).
afp.OnInfoFrance(new InfoEventArgs("Hausse du prix du tabac."));
afp.OnInfoMonde(new InfoEventArgs(
"Nouvelle élection au Etats-Unis."));
// Résilation d'abonnement.
afp.InfoFrance -= new InfoEventHandler(olivier.ReceptionInfo );
// Publication de bulletins d'information.
afp.OnInfoFrance(new InfoEventArgs("Baisse des impôts."));
}
}
Copyright Patrick Smacchia 2006 2007
|