ホームページ  >  記事  >  バックエンド開発  >  C# による Observer パターンのサポート (2)

C# による Observer パターンのサポート (2)

黄舟
黄舟オリジナル
2016-12-21 14:56:551218ブラウズ

.Net は、イベントを適用するための標準パターンを定義します。アプリケーション プロセス中にイベントを定義するためのルールに従う必要があります。標準イベント パターンには、次の 4 つの側面が含まれます。

1. System.EventArgs 型から継承されたイベント情報クラス。このクラスの名前は、SendMailEventArgs など、EventArgs で終わります。このクラスは、イベント ソースの保存と送信を担当します。人のイベントリスナー情報に。イベント ソースがイベント リスナーに追加情報を渡す必要がない場合は、EventArgs.Empty を直接使用できます。現時点では、独自のイベント情報クラスを定義する必要はありません。

2. イベントを定義するときに使用されるデリゲート (オブザーバー パターンの抽象サブジェクトと抽象オブザーバー Observer に似ています)。このデリゲートの戻り値の型は void で、最初のパラメーターの型は Object で、2 番目のパラメーターは 2 つあります。パラメーターの型は void で、1 つは System.EventArgs またはそのサブクラスで、名前は次のように EventHandler で終わる必要があります。このようにして、実際のアプリケーションにカスタム デリゲートを実装する必要がなくなり、この汎用デリゲートを直接使用してアプリケーション イベントのニーズを満たすことができます。

3. イベント サブスクライバーへの通知を担当するイベント ソース クラス (オブザーバー パターンの特定のトピック ConcreteSubject と同様) このクラスには、イベントのサブスクリプションとキャンセルのインターフェイスを外部に提供し、保存する役割を担うイベント メンバーが含まれています。 ; このイベントをすべてのサブスクライバに通知するイベントを発生させるメソッド。このメソッドは、On で始まりイベント名で終わり、System.Eventargs (またはサブクラス) の型を受け入れる、保護された仮想メソッドである必要があります。 ) パラメーター。たとえば、イベント メンバーを定義します:

public event EventHandler SendMail;

その場合、このメソッドは次のようになります:

PROtected virtual void OnSendMail(SendMailEventArgs e){}; イベントを期待するメソッドはおそらくトリガーと呼ばれます。 。

このメソッドは、イベント メッセージ クラスをインスタンス化し、イベントをトリガーするメソッド OnXxx を呼び出し、イベント メッセージ インスタンスを渡す役割を果たします。

4. イベント リスナー クラス (オブザーバー パターンの ConcreteObserver と同様) は、イベント ソースによって送信されるメッセージをリッスンするために使用されます。このクラスは、イベントと互換性のあるメソッドを定義するために使用されます。パラメータは 2 つあり、最初のパラメータの型は Object で、2 番目のパラメータは対応するイベント メッセージ クラスです。例: protected void Phone_SendMail(Object sender,EventArgs e)...;

以下は、前の記事の電子メール送信システムを書き換えたものです:

まず、デバイスに送信されたメッセージを保存する役割を担うイベント メッセージ クラスを定義します。

クリップボード印刷へのプレーンコピーを表示しますか?
public class SendMailEventArgs:EventArgs
パブリック クラス SendMailEventArgs:EventArgs

}

クリップボードにプレーンコピーしますか?クラス Mailmanager
{
// メール
パブリック システム.net.mailMailMessage メールメス ブリーク}
get {
Return new system.net.mail.mailMessage ();
}}}
// .NET Framework によって定義された一般的なコミッション
Public Eventhangler & gs & gt; / イベントをトリガーするための責任のあるメソッド
protected virtual void OnSendMail(SendMailEventArgs e)
if (sendMail != null) 。ジェクト) || string.IsNullOrEmpty(MailMess.Body)) 「メールの送信に失敗しました!」)
を使用してくださいイベント情報クラスの新しいsendmaileventargs(mailmess.subject)をインスタンス化するためのメール{}
// .NETフレームワークパブリックイベントイベントハンドラーTargs eによって提供されるジェネリックデリゲートを使用してイベントを定義します。 ) || String.isnumorempty (Mailmess.body)
{
console.writeline ("メールに失敗しました!") {O CONSOLE.WRITELINE ( "メールを送信: {0}", MailMess.Subject); // すべてのイベントを通知する購読者
これ。
public void SendMessage(object sender,SendMailEventArgs e) SendMessage(object sender,SendMailEventArgs e) Console.WriteLine("RTX 情報: {0}", e.Message); SendMessage(ob)ジェクト送信者、SendMailEventArgs e)

Console.WriteLine("携帯電話情報: {0}", e.Message); sender,SendMailEventArgs e)
{O Console.writeline ("RTX 情報: {0}", E.Message); Endregion
}



以下はクライアント呼び出しです

View Plaincopy to ClipboardPrint?
Class Program {
{
{
{
{
static void Main(string[] args) mailManager.MailMess.Subject = "通知" ; MailMess.Body = "オブザーバー モードの学習。"; MailManager.SendMail + SendToMail();//メールを送信します。 . PHPに注目してくださいその他の関連コンテンツについては、中国語の Web サイト (www.php.cn) をご覧ください。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。