C#のイベント(イベント)
(イベント)は 、基本的に言うイベントは、このようなシステムで生成された通知などのボタンをクリックし、マウスの動き、など、またはいくつかの新興、などのユーザー操作、です。 アプリケーションは、イベントが発生したときのイベントに応答する必要があります。 例えば、割り込み。 イベントは、プロセス間通信のために使用されます。
デリゲートイベントを使用して
そしてイベントは、クラス宣言の中で、イベントハンドラまたは他のクラスに関連付けられているのと同じ委譲クラスを使用して生成されます。 クラスは、公開イベントのイベントが含まれています。 これは、発行者(発行者)クラスと呼ばれています。その他のイベントタイプは、フィードリーダー(加入者)クラスと呼ばれる受け入れます。サブスクライブ(発行元加入者)モデル-パブリッシュを使用したイベント。
出版社(パブリッシャ)とイベントが含まれていますが、デリゲート定義されたオブジェクトです。イベントとデリゲートとの間の接触も、このオブジェクトで定義されています。 パブリッシャー(発行元)クラスのオブジェクトは、このイベントを呼び出し、およびその他のオブジェクトに通知します。
送り装置(加入者)が認められたイベントであり、イベントハンドラオブジェクトを提供します。Publisherの(パブリッシャー)クラスのデリゲートの呼び出しフィードリーダー(加入者)クラスメソッド(イベントハンドラ)。
ステートメント・イベント(イベント)
クラス内で宣言されたイベントでは、最初のイベントのデリゲート型を宣言する必要があります。 例えば:
パブリックデリゲート無効BoilerLogHandler(文字列の状態)。
そして、イベントのキーワードを使用して、イベント自体を宣言します。
//イベントのデリゲート公開イベントBoilerLogHandler BoilerEventLogの上記の定義に基づいて、
上記のコードは、デリゲートを定義し、デリゲートが呼び出されたときにBoilerLogHandlerという名前BoilerEventLogというイベントは、イベントが生成されます。
例1
システムを用いました。 名前空間のSimpleEvent { システムを用いました。 パブリッククラスEventTest { プライベートint型の値。 パブリックデリゲート無効NumManipulationHandler(); 公開イベントNumManipulationHandler ChangeNum。 OnNumChanged保護仮想無効() { (ChangeNum!= null)の場合 { ChangeNum()。 } ほかに { Console.WriteLineを( "イベント発射!"); } } 公共EventTest(int型のn) { 値の代入(N) } 公共ボイドのSetValue(int型のn) { (値!= n)の場合 { 値= N; )(OnNumChanged。 } } } パブリッククラスMainClass { 公共の静的な無効メイン() { EventTest電子=新しいEventTest(5); e.SetValue(7); e.SetValue(11)。 Console.ReadKey()。 } } }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
イベントは、解雇します! イベントは、解雇します! イベントは、解雇します!
例2
この例では、トラブルシューティングのアプリケーションのためのシンプルな温水ボイラーシステムを提供します。 保守者がボイラーをチェックするときは、ボイラーの温度と圧力は、自動的にログファイルに記録された保守員のノートのようになります。
システムを用いました。 System.IOを使用しました。 名前空間BoilerEventAppl { //ボイラークラスクラスボイラー { プライベートint型温度; プライベートint型の圧力; 公共のボイラー(int型トン、int型のp) { 温度=トン。 圧力= P; } 公共int型getTemp() { 一時を返します。 } 公共int型getPressure() { 圧力を返します。 } } //イベントパブリッシャークラスDelegateBoilerEvent { パブリックデリゲート無効BoilerLogHandler(文字列の状態)。 //イベントのデリゲート公開イベントBoilerLogHandler BoilerEventLogの上記の定義に基づいて、 公共ボイドLogProcess() { 文字列の発言= "O. K」。 ボイラーB =新しいボイラー(100、12); int型トン= b.getTemp(); int型のp = b.getPressure(); 場合(トン> 150 ||トン<80 || P <12 || P> 15) { 発言=「保守が必要」。 } OnBoilerEventLog(「情報をロギング:\ nを "); OnBoilerEventLog(「Temparature "+ T +" \ nPressure: "+ P); OnBoilerEventLog( "\ nMessage:" +備考); } 保護されたボイドOnBoilerEventLog(文字列メッセージ) { (BoilerEventLog!= null)の場合 { BoilerEventLog(メッセージ); } } } ログファイルのクラスBoilerInfoLoggerに書き込ま規約などの予約// { FileStream fsの。 StreamWriterの南西。 公共BoilerInfoLogger(文字列のファイル名) { FS =新しいFileStreamを(ファイル名、をFileMode.APPEND、FileAccess.Write)。 SW =新しいのStreamWriter(FS)。 } 公共ボイドロガー(文字列情報) { sw.WriteLine(情報)。 } 公共ボイド閉じます() { sw.Close()。 fs.Close()。 } } //イベントサブスクリプションは、パブリッククラスRecordBoilerInfoです { 静的な無効ロガー(文字列情報) { Console.WriteLineを(情報)。 ロガーの} //終了 静的な無効メイン(文字列[] args) { BoilerInfoLogger filelog =新しいBoilerInfoLogger( "E:\\ boiler.txt"); DelegateBoilerEvent boilerEvent =新しいDelegateBoilerEvent(); boilerEvent.BoilerEventLog + =新しいです DelegateBoilerEvent.BoilerLogHandler(ロガー)。 boilerEvent.BoilerEventLog + =新しいです DelegateBoilerEvent.BoilerLogHandler(filelog.Logger)。 boilerEvent.LogProcess()。 Console.ReadLine(); filelog.Close()。 メインの} //終了 } // RecordBoilerInfoの終わり }
上記のコードはコンパイルされ、実行されると、次の結果を生成します。
ログイン情報: 温度100 圧力12 メッセージ:O. K