Heim > Backend-Entwicklung > C#.Net-Tutorial > C#s Unterstützung für das Observer-Muster (2)

C#s Unterstützung für das Observer-Muster (2)

黄舟
Freigeben: 2016-12-21 14:56:55
Original
1225 Leute haben es durchsucht

.Net definiert ein Standardmuster für unsere Bewerbungsereignisse. Wir sollten uns an die Regeln für die Definition von Ereignissen während des Bewerbungsprozesses halten. Ein Standardereignismuster umfasst vier Aspekte:

1. Eine vom Typ System.EventArgs geerbte Ereignisinformationsklasse, deren Name mit EventArgs endet, z. B. SendMailEventArgs Quelle An Ereignis-Listener gesendete Nachricht. Wenn die Ereignisquelle keine zusätzlichen Informationen an den Ereignis-Listener übergeben muss, können Sie EventArgs.Empty direkt verwenden. Zu diesem Zeitpunkt müssen wir keine eigene Ereignisinformationsklasse definieren.

2. Der beim Definieren von Ereignissen verwendete Delegat (ähnlich dem abstrakten Subjekt Subjekt und dem abstrakten Beobachter im Beobachtermuster). Der Rückgabetyp dieses Delegaten ist void und hat zwei Parametertyp , die zweite ist System.EventArgs oder seine Unterklasse, der Name sollte mit EventHandler enden, wie zum Beispiel:

public Delegate void XxxEventHandler(object sender,SendMailEventArgs e);.net Framework definiert einen konformen generischen Delegaten des Ereignisses Spezifikation

System.EventHandler(Object sender, TeventArgs e) where TeventArgs:EventArgs;

Auf diese Weise müssen wir keine Anpassung in tatsächlichen Anwendungen implementieren. Delegiert, direkt mit dieser Der generische Delegat kann die Anforderungen unserer Anwendungsereignisse erfüllen.

3. Eine Ereignisquellenklasse, die für die Benachrichtigung von Ereignisabonnenten verantwortlich ist (ähnlich dem spezifischen Thema ConcreteSubject im Beobachtermuster). Diese Klasse enthält ein Ereignismitglied, das für die Bereitstellung von Ereignisabonnement- und Stornierungsschnittstellen nach außen verantwortlich ist world und Save their state; eine Methode, die für das Auslösen eines Ereignisses verantwortlich ist, um alle Abonnenten über dieses Ereignis zu benachrichtigen. Diese Methode muss eine geschützte virtuelle Methode sein, die mit On beginnt und mit dem Ereignisnamen endet und einen Typ von System.Eventargs akzeptiert (oder Unterklassen-)Parameter. Definieren Sie beispielsweise ein Ereignismitglied:

public event EventHandler SendMail;

Dann sollte diese Methode sein:

PROtected virtual void OnSendMail(SendMailEventArgs e){} ;

Es gibt auch eine Methode, die dafür verantwortlich ist, externe Aufrufe oder Eingaben in gewünschte Ereignisse umzuwandeln, nennen wir sie einen Trigger.

Diese Methode ist dafür verantwortlich, eine Ereignisnachrichtenklasse zu instanziieren, die Methode OnXxx aufzurufen, die das Ereignis auslöst, und die Ereignisnachrichteninstanz zu übergeben.

4. Die Ereignis-Listener-Klasse (ähnlich dem konkreten Beobachter im Beobachtermuster) wird zum Abhören von Nachrichten verwendet, die von der Ereignisquelle gesendet werden. Das Format ist return Der Wert ist ungültig und verfügt über zwei Parameter. Der erste Parametertyp ist Objekt und der zweite ist die entsprechende Ereignismeldungsklasse. Beispiel: protected void Phone_SendMail(Object sender,EventArgs e)...;

Das Folgende schreibt das E-Mail-Versandsystem im vorherigen Artikel um:

Definieren Sie zunächst eine Ereignisnachrichtenklasse, die verantwortlich ist zum Speichern der vom Gerät gesendeten Nachricht.

Klarkopie in Zwischenablage anzeigen und drucken?
public class SendMailEventArgs:EventArgs
{
//Schreibgeschütztes Informationsfeld
public readonly string Message;
public SendM ailEventArgs(string message )
                                                                          Schreibgeschütztes Informationsfeld
öffentlicher schreibgeschützter String Message ;
public SendMailEventArgs(string message)
this.Message = message;
}
}

Ereignis Quellklasse. py to clipboardprint?
class MailManager 
                                                          🎜>                                                                                                   >} get
{
Return New System.net.mail.Mailmessage ();
}
}
// Ein vom .NET Framework in Auftrag gegebener Generic definiert ein Ereignis
Öffentlicher EventHandler & lt; sendmaileventArgs & gt; > public void sendTomail ()
{! {
//Mail
public System.Net.Mail.MailMessage MailMess
{
set
{
                       MailMess = value;            > get
{
return new System .Net.Mail.MailMessage();
}
}
//Definieren Sie ein Ereignis mithilfe des vom .net-Framework bereitgestellten generischen Delegaten
public event EventHandler
//Methode, die für das Auslösen des Ereignisses verantwortlich ist
protected virtual void On SendMial (Sendmaileventargs E)
{
Eventhandler & LT; Sendmail = Sendmail! = NULL)
{
// Informiert alle Abonnenten
SENDMAIL (this, E );
}
}
//Verantwortlich für die Umwandlung externer Anrufe in Ereignisse
public void SendToMail()
if (String.IsNu llOrEmpty(MailMess.Subject) ||. string .IsNullOrEmpty(MailMess.Body))
                                                                                                                                                                                                                                                                                                                                                                                                                                                                     bis {0}", MailMess.Subject);
//Instanziieren Sie eine Ereignisinformationsklasse mithilfe des Betreffs der E-Mail
SendMailEventArgs sendMailEventArgs = new SendMailEventArgs (MailMess.Subject);

Klartext in Zwischenablage anzeigen und ausdrucken?
Klasse Mobiltelefon
{
                                                                                                                       e.Nachricht);
                                                                 Public void SendMessage(object sender,SendMailEventArgs e)
{
Konsole. WriteLine("RTX message: {0}", e.Message);
} }

#endregion
} {
#region SendHandler member

public void SendMessage (Objektsender,SendMailEventArgs e)
{
Console.WriteLine("Mobile phone message: {0}", e.Message);
                                                                          Mitglied

public void SendMessage(object sender,SendMailEventArgs e)
{
Console.WriteLine( "RTX-Nachricht: {0}", e.Message); 🎜>        #endregion
                                                                                                                                                         
mailManager.MailMess.Subject = "Notification";
mailManager.MailMess.Body = „Lernen im Beobachtermodus.“;
mailManager.SendMail+=new MobilePhone().SendMessage;//Registrieren Sie Mobiltelefonbenachrichtigungen
mailManager.S endMail+=new RTX().SendMessage; //Registrieren Sie RTX-Benachrichtigungen                                                                                                                      mailManager ( );
                                                                                                                                                                                                                                        .



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage