ユーザ用ツール

サイト用ツール


cli:event

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

cli:event [2009/02/03 07:19]
admin
cli:event [2013/12/23 09:08]
ライン 1: ライン 1:
-{{indexmenu_n>​19}} 
-====== event ====== 
- 
- 
-eventはその名のとおりイベントを処理するために用意されたものです。イベントソースとなるクラスはeventを定義し、イベントを受け取りたいクライアントはそのクラスのeventに対して、自身の持つ関数を登録します。 
- 
-たとえば、buttonクラスはclickedイベントを持ち、クライアントはOnClick()を定義し、それをbuttonクラスのclickedに登録します。 
- 
-実際にコードを書くには、まずdelegateでイベント用の関数の型を定義します。イベントソースクラスはそのdelegateのeventを宣言し、クライアントはそのdelegate型の関数を定義し、eventに登録します。 
-<code cpp> 
-using namespace System; 
-delegate void ClickHandler();​ 
-ref class button { 
-public: 
-    event ClickHandler^ Clicked; 
-    button() { 
-        btnForTest = this; 
-    } 
-public: 
-    void someoneclicked() { 
-        Clicked(); 
-    } 
-    static button^ btnForTest; 
-}; 
-ref class Client { 
-private: 
-    button^ btn; 
-public: 
-    Client() { 
-        btn = gcnew button; 
-        btn->​Clicked += gcnew ClickHandler(this,​ &​Client::​OnClick);​ 
-    } 
-private: 
-    void OnClick() { 
-        Console::​WriteLine("​someone clicked."​);​ 
-    } 
-}; 
-int main() 
-{ 
-    Client^ client = gcnew Client; 
-    button::​btnForTest->​someoneclicked();​ 
-    return 0; 
-} 
-</​code>​ 
-上記の例において、buttonクラスの 
-<code cpp> 
-event ClickHandler^ Clicked; 
-</​code>​ 
-は以下のように書いても動作します。 
-<code cpp> 
-ClickHandler^ Clicked; 
-</​code>​ 
-しかしeventとすることによっていくつかの制約がかかります。一つはClickedのコールはbuttonしかできなくなります。またクライアントがClickedに対して許可された操作は += と -= のみとなり、Clickedに対して、Clicked()したり Clicked = nullptrしたりすることができなくなります。 
- 
-Clickedはいろいろなクライアントが登録するので、勝手に実行したり、nullptrをセットされたりしたらまずいのです。 
  



/var/www/html/virtual/cppcli/data/pages/cli/event.txt · 最終更新: 2013/12/23 09:08 (外部編集)