Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9517

C# の Invoke, delegate の話の抽象化

$
0
0
どうしても C# の Invoke, delegate の解説記事がうまく理解できないので、ゆっくり咀嚼しつつ自分なりの抽象化を試します。 ちゃんと C# を勉強しないまま使わざるを得ないので、試行錯誤の過程でこういうことになるのです... delegate とは 関数ポインタ型 のようなもの なので実体を作らないと使えない。 実体を作るときのコンストラクタには、実行したい関数のポインタを指定する。(つまり関数名を書く) delegate の宣言の形は delegate 実行したい関数の戻り値型 デリゲートの名前( 実行したい関数と同じ引数 ) という感じ。ただ戻り値がどこに戻るのかよくわからない。つまり受け取り方がよくわからない。むむむ。後で勉強しよう。 Invoke とは 関数ポインタを別スレッドに投げること。 コントロールのメソッドである Invoke は、そのコントロールの属するスレッドで投げられた関数を実行する。 引数には 1. デリゲートの実体 1. 実行したい関数への引数 を渡す。実行したい関数への引数がややこしいが、複数個の引数を羅列した object 配列を塊として渡す。 塊の作り方は new object[]{ param1, param2, ...} 雛形 delegate void DELEGATENAME( T1 param1, T2 param2 ); void FUNCTIONNAME( T1 param1, T2 param2 ) { } // 別のスレッドで実行されている関数 void OTHER_THREAD_FUNCTION() { DELEGATENAME dINSTANCE = new DELEGATENAME( FUNCTIONNAME ); oneObject.Invoke( dINSTANCE, new object[]{ param1, param2 } ); } こんなところでしょうか。

Viewing all articles
Browse latest Browse all 9517

Trending Articles