1 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 17:44:56 ] 前スレ VB.NET質問スレ(Part30) pc12.2ch.net/test/read.cgi/tech/1242522019/l50 テンプレは>>2 〜
357 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:30:29 ] >>355 だから書いてみてよ。 全部のスレッドを終了するメソッドを問題ないように書いてみなよ。
358 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:39:46 ] >>357 逆にチミが「問題」が発生するコードを書いてみれば?w 俺は馬鹿に説明するためにそれなりに長くならざるをえないサンプルコードを 書くなんてまっぴら御免だけど、ダメなコードのどこがダメでどう直せばいいかを 解説するぐらいの手間は払うよ。
359 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:44:20 ] あーつまり書けないのか?かけるんなら書けよ。 超初心者でも間違う方がおかしいコードなんだろ。 すぐ書けるだろ。 俺は>>349 辺りでどうかなって書いたんだからさ。 まあ絶対書かないよな、お前そういう奴だよ。 >俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、 >超初歩的な内容だと思うけど。 いきなりこういう反応をするやつで、自分からまともに何かを示すやつを見たことがない。 何を言ってもはぐらかすだけで、自分からは絶対に書かないんだよ、
360 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:46:53 ] 単純に字義通りに取った場合、最初のスレッドの処理が終わったら 他のスレッドの処理が途中であっても終了するということになる。 それを指摘してるんだろ。
361 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:49:00 ] >>359 俺は「かけるんなら書くべき」なんていう妙な価値観を持ってない。 もちろん君がそういう価値観を持つのは勝手ではあるが、 その価値観を他人に振りかざして無理強いする前に、君自身が自分の価値観を 実践したらどうなのか。
362 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:50:28 ] >>360 誰に向かって何が言いたいの?
363 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:55:40 ] >>358 クソワロタ どんなコードをイメージして簡単だと言ったのかなんて>>358 以外分からん
364 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 16:56:30 ] >>362 >352に対して、言葉は正しく正確にと。
365 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:00:25 ] >>364 >>360 がそんな偉そうなことが言えるような文章なのか。
366 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:06:15 ] まあ、汎用的な用途を考えるんじゃなくてスレッドの処理内容を全部自分で書くなら 全部のスレッドを強制終了させるようなコードでもまずまず問題はおこらならいだろうと期待はできるけど、 普通にスレッドを扱うようなプログラムを書くやつは、そもそもスレッドを強制終了させようなんて発想しないよね。 >>349 みたいなやり方を発想するのがごく普通というか常識な感覚であって、 >>352 みたいな発想は出てこない。 >>352 みたいな発想はまともにマルチスレッドのプログラムを書いたことがないようなやつの 典型的な発想パターンだよね。
367 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:10:18 ] >>366 俺はスレッドをアボートする、なんて一言も書いてないが。 先に「問題」があるコードをまず提示しろ、って言ってるのはそのあたりの 微妙な問題もあるからなんだけどね。
368 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:12:21 ] アボートする以外にどうやって全部のスレッドを終了するメソッドを書くのか教えてくれ。
369 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:13:46 ] >>368 だから、そんなものはスレッド内の処理に依存する問題であって、 一意にこうだ、なんて言えない。 だから先に「問題」があるコードを提示しろと言ってる。
370 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:14:17 ] >>367 基地外だなこいつ。 >先に「問題」があるコードをまず提示しろ、って言ってるのはそのあたりの >微妙な問題もあるからなんだけどね。 >俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、 >超初歩的な内容だと思うけど。 おいw
371 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:16:16 ] >>370 意味がわからん。
372 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:19:06 ] >>369 だんだんこいつが何を言ってるのか分からなくなってきた >そんな面倒なことしなくてもベタにやるだけだと思うけど・・・ > >全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で >それを呼び出すようにするだけじゃん。 >悩むような問題かね。 そのやり方を教えろってんだよ。 >>349 に対して >そんな面倒なことしなくてもベタにやるだけだと思うけど・・・ なんだったらもっとシンプルなべたな方法があるんだろ? スレッドをアボートしない方法でそんな方法は思いつかないが。
373 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:22:34 ] >>372 スレッドをアボートするのとスレッドを終了させることはイコールじゃないよ。 こんなことから説明しなきゃならんのかよ。 例えばスレッドの中身が単純なwhileループなら、外からループ条件をfalseに 設定してやればスレッドは終了する。 っていうか、>>347 の問題とスレッドの終了方法は直接関係がない。
374 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:26:42 ] だからそれってほとんど>>349 だろ? それよりもベタな簡単な方法が、 「全スレッドを終了させるメソッドを最後に呼ぶ」 なんだろ? かつその方法はアボートしないんだろ? じゃあどうすんの?
375 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:28:25 ] >>373 >>349 見たら明らかだがどうみてもそんなこと分かってるっていうか最初からそう書いてる。
376 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:28:27 ] 単純化して言えば、>>347 の問題は>>352 に書いたとおり、 各スレッドを終了させる方法(メソッド)が用意されていれば、 全てのスレッドに対応するそのメソッドを呼び出すメソッドを作って、 それを各スレッドの一番最後の処理から呼び出すようにするだけ。 もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して デッドロックしないよう注意は必要だよ。
377 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:36:45 ] >単純化して言えば、>>347 の問題は>>352 に書いたとおり、 >各スレッドを終了させる方法(メソッド)が用意されていれば、 >>354 >各スレッドを終了させる方法(メソッド)が用意されていれば、 www そのメソッドを示さないと悩むだろw >悩むような問題かね? ってんだからさ、悩まないようにしてやれよ。 >各スレッドを終了させる方法(メソッド)が用意されていれば、 >全てのスレッドに対応するそのメソッドを呼び出すメソッドを作って、 >それを各スレッドの一番最後の処理から呼び出すようにするだけ。 > >もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して >デッドロックしないよう注意は必要だよ。 これが、>>349 に対して、 >そんな面倒なことしなくてもベタにやるだけだと思うけど・・・ の面倒なことしないベタなやり方なんだな。
378 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:38:19 ] 一番笑えるのは全部後だしでヒントが出た瞬間に反応してくることだな。
379 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:39:50 ] メインスレッドで終了フラグ立ててサブスレッドは そのフラグが立ってれば終了すればいいんじゃないの?
380 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:42:33 ] >>376 >もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して >デッドロックしないよう注意は必要だよ。 デッドロックって言葉が思いついたのか? この話の流れでは自分自身の終了を待つなんて状況自体が発生しないはずだけどな。 それとも>>376 のどこかで終了を待つようなコードを書いてしまう可能性があるのかい? どこで書くんだろうなそんなこと。
381 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:47:42 ] 他所でやれ
382 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:47:54 ] >>379 メインからは分からないから終了フラグは立てられない。 だから、終了フラグみたいなのを立てるのはスレッド側になる。 >>349 のようにイベントを使うか、 もしくはフラグだけにしてメインからは全スレッドにJoinするか、くらいだな。 まあイベントの方が普通なやり方だけど。 Joinだと結局全スレッドが終わるのを待つ感じになるからね。
383 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 17:56:39 ] どう見ても>>352 が素人で病気 以上、終了
384 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 18:25:35 ] >>380 ダメグラマらしい意見だね。 全てのスレッドを終了させるメソッドは、それ自身が終了させようとする スレッドの中の一つから呼ばれる。 スレッドの終了処理は、実際にターゲットのスレッドが終了したかどうかの 確証をするのが普通だから、例えばそれをベタにJoin()を使って行うとデッドロックする。
385 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 18:27:55 ] っていうか、結局起こりうる「問題」って何のことなのかね。 まったく意味がわからん。
386 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 18:33:59 ] 普通じゃないし今回の話でも確証なんて意味がない。 止まらない可能性まで考慮するならそもそもJoinなんて使っちゃダメで 自分自身だからどうという話ではない。 まだ続ける気? なら>>352 の例を示してほしいんだがな。
387 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:07:39 ] >>385 >>349 に対して>>352 で面倒なことしなくてもって言ってるんだから しかもスレッドを終了させるって言ってるんだから、 普通に考えればアボートすると言ってるとしか読み取れない。 本来そんな事しないでもすむのにスレッドをアボートするってだけで既に問題ありとされるのが普通。 スレッド使う上での常識としてね。 で、どっちにしても書き方からスレッドに関して素人なのが明らかだから、 コード書かせりゃそれ以外にもどっかに問題あるコードになる可能性が高いと思ってな。 まあ必要ないのにアボートする時点で常識的に問題ありとみなしていいレベルだが。 まさかフラグ立ててスレッド側で監視しつつ終了待機するメソッド作るのが>>349 よりベタとは思わないし、 フラグ立てるだけなら普通スレッドを終了するメソッドとは言わないし そもそもメソッドにするだけで面倒が増えてるだけ。 >>349 ですら面倒で、よりベタとなるとアボートするくらいしかない。 ってのが>>354 の意図。 ああ長い。
388 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:15:15 ] まあ正直いうと単に>>354 みたいに書いたら どっかでボロを出すかと思ったのも有るけどな。 >>352 も微妙な問題があるって自分で言ってるんだから、 本人じゃないならあとは>>352 に微妙な問題について聞いてくれよ。
389 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:18:48 ] >>387 なーんか2ch脳らしい強引な物の言い方だね。 何度も言うように スレッドの終了 ≠ スレッドのアボート 君が両者をイコールだと思うのは完全に勝手だが、 「俺にスレッドの終了=スレッドのアボートだと思わせるのはお前のせい」 みたいな自己中心的な物言いをされても、「恥を知れ」以外に返す言葉がない。 まあ、>>352 の発言が言葉が足りずミスリーディングなのは認めるけど、 要は、スレッドで実行したい処理をクラスでラップする「ベタ」な方法を取るべきであって、 >>349 的なスパゲティーコードはよくないって事だよ。
390 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:31:52 ] お前>>349 のやり方の意味分かってるのか? かなりベタでスパゲッティとかいうようなやり方じゃないぞ。 だいたい>>349 はプリミティブレベルの考え方に近いもので クラス化するとかどう書くかは別にやりたきゃ好きにしろってレベルだぜ。 つかクラスでラップってまたいきなり初めて出てきたな。 >>352 がそういう意図ってお前エスパーでも相手にしてるのか? 流石にそのベタなコードとやらを示してもらわないと分からない。 あっ余計な事言ったか、またループだな。
391 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:35:23 ] スレッドで実行したい処理をクラスでラップする、なんていうのは、 「ベタ」、つまり説明不要の定石だから説明しなかったまで。 っていうか、もういいわ別に。 一人かどうか知らんけど君みたいな馬鹿言い負かしても意味ないし。
392 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:38:21 ] こんな感じ?待っていれば他のスレッドも終了するという前提だけど。 Static testArr() As Boolean = New Boolean() {False} SyncLock testArr Dim testRes As Boolean = testArr(0) testArr(0) = True If testRes Then Exit Sub End SyncLock For Each thread In threads If Not Object.ReferenceEquals(thread, thread.CurrentThread) Then thread.Join() End If Next testArr(0) = False
393 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 19:53:18 ] >>391 今回は元々やりたい処理がそれぞ別メソッドになってるけど、 それでも「処理」をクラスでラップするのが常識かな? 一般に処理をクラスでラップするのが常識なのは、 処理に必要なデータをクラス側で管理するためで 今回のはどちらかと言えばスレッドの制御をクラスの機能として実装し、 処理はデリゲートとしてスレッド制御のクラスに渡すってのが普通な気がする。 C#なら匿名メソッドやらラムダ式使えばすごいシンプルに出来るんだがな。 今のVBって複数行のラムダ式使えたっけ? 次のバージョンからだったかな?
394 名前:351 mailto:sage [2009/09/26(土) 20:17:09 ] だから〜、沢山スレッド作っておいて一等賞を取ったスレッド以外を 終了させるなんていったい何がしたいんだ〜?
395 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 21:13:59 ] >>391 >スレッドで実行したい処理をクラスでラップする、なんていうのは、 >「ベタ」、つまり説明不要の定石だから説明しなかったまで。 >>347 のでどうやんだよこれ…?
396 名前:347 mailto:sage [2009/09/26(土) 21:22:45 ] 盛りあがってますね >>349 の方法でやってみます。ありがとうございました。 >>351 最小で1つ、多くてもせいぜい3つぐらいなんですけどね>スレッド数 内容は禁則事項です♪
397 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:45:23 ] そんなスパゲッティで面倒な方法はだめだ。 >>352 >>376 >>389 >>391 を見てクラスでラップする「ベタ」な方法でやるんだ。 こんなの定石だから>>351 はあえて教えてくれないぞ。 コードができたら問題点を指摘してくれるから見せてみるんだ。
398 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:49:50 ] 言っとくがこんな超初歩なところで問題あるコードなんて書いたら ちょっとオカシイってことだからな、超初歩以前に君がおかしくないかがためされるんだぞ。 心してかかるんだ。
399 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 22:54:17 ] そろそろウザイ。
400 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 23:16:42 ] テンプレ Q. 〜のやり方を教えてください A. クラスにラップしてベタに書け
401 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 03:41:35 ] デリゲートでマルチスレッドし、AsyncCallbackでコールバック関数で残りすべてのスレッドを終了させればOK
402 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 09:27:16 ] >>401 BackgroundWorkerでよいのじゃないか
403 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 11:06:32 ] ダメとは言わないが向いてないね。 意味がない。
404 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:13:46 ] >>401 AsyncCallback関数の中をどうやって実装するのだろう? なんか振り出しに戻る予感。。
405 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:49:39 ] BackgroundWorkerが一番楽だと思う。 WorkerCompleteあるし、CancelAsyncあるし。 >>401 は、どうやってほかのスレッド終了させるんだろう。
406 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:50:11 ] 結局大して変わらないよね。
407 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:52:23 ] >>405 どっちも大して変わらんて。
408 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:55:10 ] Environment.Exit()
409 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:56:59 ] VB2008の555だったかの究極?技?何とか言う本 立ち読みしてみたら酷かった。 この手の本はあんま進歩しないなあ。 ちゃんと理解してる内容だけ書けばいいのに。 .NET系って本に間違いが多すぎる気がする。
410 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:58:55 ] >>408 それだとプロセスが終了しちゃうじゃん。
411 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 13:59:05 ] >>347 っぽいコードをそれぞれのやり方で書いてみれば どれがやりやすいか、あまり差がないか よく分かると思うぞ。
412 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 15:00:04 ] >>410 >>347 は全てのスレッドを終了させると書いているので間違いではないな。
413 名前:デフォルトの名無しさん mailto:sage [2009/09/27(日) 15:03:56 ] >>409 ドボンちゃんのサイト等があるのに今どきそんな本を買う人が居るのかね〜?
414 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 16:08:22 ] 詳しく
415 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:01:14 ] 継承されるクラスを作成するときに オーバーライドとイベント実装をどこで切り分けていますか?
416 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:02:24 ] >>414 ドボンを?
417 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:05:00 ] 継承を前提にするんだったらイベントはいらん 継承しないで外からアクションを挿入するためにイベントを使うんだ
418 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 20:15:19 ] >>415 ,>>417 二人とも何を言ってるのか意味不明すぎる。 エスパー同士の会話なのかアーパー同士なのかどっちなんだ。
419 名前:417 mailto:sage [2009/09/28(月) 20:23:03 ] 「継承されるクラスを作成」と書いてあるから,抽象クラスでも作ってるのかと思った たぶん勘違い Formの派生クラスを作ったときにFormのOnPaintをオーバーライドするべきかPaintイベントを使うべきか というような話なら,一般的にはオーバーライドした方がいい(少なくともMSDNにはそう書いてある)
420 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 22:50:51 ] >>419 Formは必ず派生クラスで使うのにOnHogeとHogeイベントの両方があるのかって話し。 実行効率が良いのはOnHogeだけど使いやすいのはHogeイベントかなと。 だったらイベントだけで実装しても良いのではないかと思っただけです。
421 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:04:15 ] OnHogeはオーバーライドされるためだけにあるんじゃない。 派生クラスから基底クラスのOnHogeを呼ぶことでHogeイベントを発生させるためにも使われる。 .NETのガイドラインで決まってることだから黙って従え
422 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:15:33 ] >>420 まあ>>421 みたいな教条主義もどうかと思うが、 自分で発生するイベントを自分で受信する、普通に考えれば間抜けチックなプログラミングを 「使いやすい」と感じるセンスには疑問を持った方がいいと思うよ。 それはおかしい。かなり変てこなセンスだ。
423 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:20:18 ] WPFになるとOnHogeを持たず派生クラスでもイベントハンドラを使うしかないイベントが多く出てくるよ。 まあWPFは設計が全然違ってて機構上そうなってるんであって WinFormsではおとなしくOnHogeを使うべき。
424 名前:420 mailto:sage [2009/09/28(月) 23:25:16 ] オレの説明がとっても変だったか。。 仮想メソッドを使うかイベントデリゲートを使うかって話です。 便利と言うのはIDEがイベントを挿入してくれるから。
425 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:27:33 ] 仮想じゃなくて抽象メソッドだった。
426 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:44:41 ] >>422 IDEとトータルで考えない方がセンスがないだろう。 全部イベントなのにフォームとコントロールでわざわざ使い分けるのがセンスがいいのか?
427 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 23:45:41 ] >>425 つまり、別の言い方をすればprotectedなイベントは有りかって話かな? 少なくとも.NETクラスライブラリの中にはあるね。 個人的はそういう方法を取りたい場面に当たったことがない。
428 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 11:14:14 ] >>424 継承と委譲の区別は出来てるか?
429 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 16:05:39 ] >>416 冗談w
430 名前:デフォルトの名無しさん [2009/09/29(火) 20:06:10 ] >>428 抽象メソッドとデリゲートは結果的の同じだが。
431 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 21:44:31 ] イベントは引数の形式が決まってるだろ(従わないことも可能だが完璧なガイドライン違反) テンプレートメソッド作る度にいちいちHogeEventArgsやHogeEventHandler用意すんの? それに抽象メソッドなら派生クラスで実装することを強制できる
432 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:48:08 ] >>424 便利かなぁ…? とりあえず overrides空白 まで入れればインテリセンスは利くわけだし。 >>430 つまり「よくわからない」ってことね。 そのフォームを他のフォームのインスタンスに含めるのであれば いちいち派生させずともイベントを追加してやればいいし 常に派生させるんだぜ!というのなら Protected Overridable なメソッドを 用意してやればいい。 まあ両方用意しとくのが無難だし、>>422 には同意しとく。 >>431 >いちいちHogeEventArgsやHogeEventHandler用意すんの? 特に追加情報がなければ EventArgs をそのまま使えばいいし、 そーすっとデリゲートも Public Event Hoge(ByVal sender As Object, ByVal e as System.EventArgs) の一行で済む。
433 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 11:49:17 ] VB終了のお知らせ gigazine.net/index.php?/news/comments/20090930_security_essentials/
434 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:09:43 ] なんでM$製のアンチウィルスソフツがVBに関係するのか、>>433 には説明を求む。 文中検索掛けてもVBもVisualも引っかからなかったのだが。
435 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:18:59 ] 古典的ネタにマジレスカコイイ
436 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:37:14 ] >>432 >とりあえず overrides空白 まで入れればインテリセンスは利くわけだし。 お〜、そんなんが出来るんだ。 知らなかった。ありがと〜ん。
437 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:38:10 ] ネタだったのかYO! 何かVB.NETの動作を阻害するものが入って動かなくなるのかと心配しちゃったじゃないかw
438 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:50:32 ] インテリセンスとGoogleが無いとプログラミングが出来ない身体になってしまった。
439 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 19:51:46 ] それでいいのだ
440 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:23:36 ] >>428 オブジェクト指向で言う委譲とデリゲートの委譲は別のものでしょ?
441 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 20:54:58 ] 同じだ オブジェクト指向でいう移譲を手軽に使えるようにするための仕組みがデリゲート
442 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:04:15 ] どこがどういうふうに手軽なの?
443 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:09:17 ] Javaやればありがたみがわかるよ いちいちイベントハンドラごとに内部クラス作ってインターフェイス実装するんだぞ やってることは本質的にデリゲートとまったく同じだけど糞面倒で可読性も悪い
444 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:19:01 ] 別に内部クラスとかつくらなくても、クラス自身でインターフェース実装して、 addActionListener(this); とかできるじゃん。 全然面倒くさくないし、簡潔明瞭じゃん。
445 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:25:55 ] 同じ型のリスナを複数実装したいときは? それに,直接実装するならpublicにしないといけないだろ? イベントハンドラが全部publicで同じ名前(実際には無理だけど)ってどう思う?
446 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:37:32 ] 引数で区別できなかったっけ? publicで何か不都合ある? どうしても不都合なら、別に内部クラスとかつくるのもそれほど面倒とは思えんが。
447 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:44:33 ] >>446 443じゃないけど、面倒に決まってるでしょ。 だいいち、ただコールバックして欲しいだけなのに 本質的でないインターフェイスが必要になる点で鬱陶しすぎる。
448 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:48:43 ] >>446 Javaやってるとはとても思えないな カプセル化ってわかってる? コントロールを削除したらpublicメンバを削除して継承してるインターフェイス減らすの?
449 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 21:58:47 ] インターフェースが必要かデリゲートが必要かの違いだから面倒くささ度の観点からみれば対して変わらん。 インタフェースの方が実装の有無が他クラスから判断できるとか、使い回しができるとか、便利な面もある。 実際、AOPではインターフェースのそういった性質が多用されている。 同様にインターフェイス外すのも、デリケート外すのも俺的には面倒くささはいっしょ。特にC#とJavaでは。 VB.NETのは場合メソッド削除するだけだから幾分簡単に見えるが大した違いではない。あとIDEの自動化による 簡便性の違いは多少あると思う。
450 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:01:14 ] Javaは単一のactionPerformedで全部受けてifでイベントの発生源ごとに分岐するパターンが最悪 WndProcかよ
451 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 22:24:35 ] orz
452 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:49:19 ] >>449 デリゲートはあくまで委譲のための(処理をカプセル化するためといってもいい)しくみなんだし、 いわゆる一般的な意味でのインターフェイスに関して インターフェイスかデリゲートかっていうものではないでしょ。 javaだってイベントは普通委譲モデルで、ほとんどデリゲートとおんなじことやってるだけだし。 この使い方においてはインターフェイスもデリゲートも大した違いはない。 まあ専用のしくみであるデリゲートの方がよっぽど分かりやすいと俺は思うが。 .NETの言語だって、本来の意味でのインターフェイスの代わりに デリゲートを使うなんてことは普通はしない。 ただし、フォームのイベントなんかは、実質考え方自体がイベントなんだから、 自分自身のイベントもコントロールなんかと同じようにイベントハンドラでやっても 何らおかしいことはない。
453 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 23:59:22 ] 問題はIDEとの相性の悪さ JavaでIDEにイベントリスナを自動生成させたりするとものすごーく分かりづらいコードが出来上がる
454 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 10:13:13 ] DataBindingしてるソースの方を変更したとき、コントロールに同期させるには どうすればいいでしょうか? IPropertyChangedを実装する方法はわかったのですが、そういった準備なしに どこかのメソッドを呼び出す形で同期することはできないでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2009/10/02(金) 23:58:40 ] ResetBindings
456 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 09:56:55 ] Form2からForm1のTextBox1.Textを設定できネーよなんとかしろ
457 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:07:58 ] >>456 するな、そんな阿呆なこと。 Form1 に、TextBox1.Text を取得/設定する Public なプロパティを定義するのが常套。