Maison >développement back-end >Tutoriel C#.Net >Prise en charge par C# du modèle Observer (2)
.Net définit un modèle standard pour nos événements de candidature. Nous devons respecter les règles de définition des événements pendant le processus de candidature. Un modèle d'événement standard comprend quatre aspects :
1. Une classe d'informations sur l'événement héritée du type System.EventArgs, et le nom de cette classe se termine par EventArgs, comme SendMailEventArgs. source. Message envoyé aux écouteurs d’événements. Si la source de l'événement n'a pas besoin de transmettre d'informations supplémentaires à l'écouteur d'événement, vous pouvez utiliser directement EventArgs.Empty. Pour le moment, nous n'avons pas besoin de définir notre propre classe d'informations sur les événements.
2. Le délégué utilisé lors de la définition des événements (similaire au sujet abstrait Subject et à l'observateur abstrait Observer dans le modèle d'observateur. Le type de retour de ce délégué est vide et a deux paramètres. Le premier type de paramètre est Object). , le second est System.EventArgs ou sa sous-classe, le nom doit se terminer par EventHandler, tel que :
public délégué void XxxEventHandler(object sender,SendMailEventArgs e);.net framework définit un délégué générique d'événement conforme spécification
System.EventHandler
De cette façon, nous n'avons pas à implémenter une personnalisation dans les applications réelles Délégué, directement en utilisant ceci un délégué générique peut répondre aux besoins de nos événements d'application.
3. Une classe source d'événement chargée de notifier les abonnés à l'événement (similaire au sujet spécifique ConcreteSubject dans le modèle d'observateur). Cette classe contient un membre d'événement, qui est chargé de fournir des interfaces d'abonnement et d'annulation d'événement vers l'extérieur. world et Save their state ; une méthode chargée de déclencher un événement pour informer tous les abonnés de cet événement. Cette méthode doit être une méthode virtuelle protégée qui commence par On et se termine par le nom de l'événement, et accepte un type de System.Eventargs. (ou sous-classe). Par exemple, définissez un membre d'événement :
événement public EventHandler
Ensuite, cette méthode doit être :
Vide virtuel protégé OnSendMail(SendMailEventArgs e){} ;
Il existe également une méthode chargée de convertir les appels ou entrées externes en événements souhaités, appelons-la un déclencheur.
Cette méthode est chargée d'instancier une classe de message d'événement, d'appeler la méthode OnXxx qui déclenche l'événement et de transmettre l'instance de message d'événement.
4. La classe d'écoute d'événement (similaire à l'observateur concret ConcreteObserver dans le modèle d'observateur) est utilisée pour écouter les messages envoyés par la source d'événement. Cette classe est utilisée pour définir des méthodes compatibles avec les événements. return La valeur est void et a deux paramètres. Le premier type de paramètre est Object et le second est la classe de message d'événement correspondante. Exemple : protected void Phone_SendMail(Object sender,EventArgs e)......;
Ce qui suit réécrit le système d'envoi d'e-mails dans l'article précédent :
Définissez d'abord une classe de message d'événement, qui est responsable de la sauvegarde du message envoyé dans Messages envoyés par l'appareil.
afficher la copie en clair dans clipboardprint ?
public class SendMailEventArgs:EventArgs
{
//Champ d'information en lecture seule
public readonly string Message
public SendM ailEventArgs(string message; )
Champ d'information en lecture seule
public readonly string Message ;
public SendMailEventArgs(string message)
this.Message = message;
}
}
Événement classe source. py to clipboardprint?
class MailManager
🎜> >}
{
Return New System.net.mail.Mailmessage ();
}
}
// Un générique commandé par le framework .NET définit un événement
Événement public EventHandler
//Méthode responsable du déclenchement de l'événement
protected virtual void OnSendMial(SendMailEventArgs e)
(sendMail != null)
🎜 > public void SendToMail()
{ ! );
} );
//Instancier un événement en utilisant le sujet de la classe d'informations de l'e-mail SendMailEventArg s this.OnSendMial(sendMailEventArgs); >classe MailManager
{
//Mail
public System.Net.Mail.MailMessage MailMess
{
set
{
MailMess = valeur; > get
{
return new System .Net.Mail.MailMessage();
>
>
//Définir un événement à l'aide du délégué générique fourni par le framework .net
public event EventHandler
//Méthode responsable du déclenchement de l'événement
virtuel protégé void On SendMial (SENDMAILEVENTARGS E)
{
Eventhandler & LT; Sendmaileventargs & GT; Sendmail = Sendmail;
{
// Informe tous les abonnés
SENDMAIL (this, E );
}
}
//Responsable de la conversion des appels externes en événements
public void SendToMail()
if (String.IsNu llOrEmpty(MailMess.Subject) || chaîne .IsNullOrEmpty(MailMess.Body))
🎜> {
. jusqu'à {0}", MailMess.Subject);
//Instancier une classe d'informations sur un événement à l'aide du sujet du courrier
SendMailEvent Args sendMailEventArgs = new SendMailEventArgs(MailMess.Subject);
//Notifier tous les abonnés à l'événement
This.OnSendMial(sendMailEventArgs);
}
}
}
Cours d'écoute d'événement
afficher la copie ordinaire dans le presse-papiers ?
classer le téléphone portable
{
e.Message);
Public void SendMessage(object sender,SendMailEventArgs e)
{
Console. WriteLine("Message RTX : {0}", e.Message);
} }
#endregion
} {
#region SendHandler member
public void SendMessage (expéditeur de l'objet, SendMailEventArgs e)
{
Console.WriteLine("Message sur téléphone portable : {0}", e.Message);
Membre
public void SendMessage(object sender,SendMailEventArgs e)
{
Console.WriteLine( "Message RTX : {0}", e.Message); 🎜> #endregion
Main(string[] args)
mailManager.MailMess.Subject = "Notification"
mailManager.MailMess.Body = "Apprentissage du mode observateur.";
mailManager.SendMail =new MobilePhone().SendMessage;//Enregistrer les notifications du téléphone portable
mailManager.Send Mail=new RTX().SendMessage; //Enregistrer les notifications RTX gestionnaire de messagerie. )
); .