問題タブ [delegates]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1357 参照

c# - デリゲート チェーンを破棄する例外を停止するにはどうすればよいですか?

私は共通の問題に違いないものに出くわしました。いくつかの異なるクラスによってサブスクライブされる可能性のあるイベントがある場合、これらのクラスのいずれかによって例外がスローされると、コールバック チェーンが強制終了されます。コールバックが実行される順序がアプリオリにわからないため、これにより、一部のクラスでは予測できない状態変化が発生し、他のクラスでは発生しない可能性があります。

聖書(C# 経由の CLR、私は C# 2.0 を使用しています)には、MulticastDelegate.GetInvocationListこれを回避するための使用に関する短い段落がありますが、それ以上のものはありません。だから私の質問は、これに対処する最善の方法は何ですか? MulticastDelegate.GetInvocationListイベントがあるたびに使用する必要がありますか?? それとも、ある種のロールバック メカニズムでデリゲート チェーンの一部として呼び出される可能性があるすべてのメソッドを囲む必要がありますか? C# で非常に使いやすい単純なイベント/デリゲート モデルと比較して、これらすべてのオプションが非常に複雑なのはなぜですか? そして、破損した状態にならずに簡単な方法を使用するにはどうすればよいですか?

ありがとう!

0 投票する
3 に答える
6108 参照

c# - EventHandler と匿名デリゲート / ラムダ式

匿名のデリゲートとラムダ式を使用して C# でイベント ハンドラーのメソッドを作成することで、少なくとも私自身は解決したいと思っています。

匿名デリゲートまたはラムダ式のいずれかを追加するイベントがあるとします (新しいバージョンの .NET を使用できる幸運な人々のために)。

クラスがガベージ コレクションされるのを防ぐハンドラーがまだあるイベントについて、過去の人々が忘れていることを読んだことがあります。クラス内で SomeEvent を null に設定するだけでなく、追加されたハンドラーを削除するにはどうすればよいでしょうか。以下はまったく新しいハンドラではないでしょうか?

匿名デリゲートまたはラムダ式を変数に格納することがわかりました。しかし、少なくとも私には、イベント ハンドラーを簡単かつ簡潔に追加できるようにするという目的全体が無効になっているように思えます。

繰り返しますが、私はあなたができることを理解しています...

しかし、イベントから動的に作成されたメソッドを削除するだけで、より興味深いものになります。うまくいけば、誰かが私のためにこれに光を当てることができます. ありがとう!

0 投票する
3 に答える
3458 参照

c# - デリゲートとラムダとLINQ、オーマイ!

かなり後輩の開発者として、私は経験不足と知識の穴を浮き彫りにする問題に直面しています。ここの前文が長すぎる場合は失礼します。

私は、LINQ(このプロジェクトの目的のためにOBJECTSおよびXML)を含む多くの新しい(私にとって)テクノロジーを学ぶ必要があるプロジェクトに自分自身を見つけました。これまで読んだことはすべて、LINQを利用するには、以下(デリゲート、匿名メソッド、ラムダ式)を完全に理解する必要があることを示唆しています。

さて、楽しみが来ました。.NETイベントモデルを使用して作業したため、過去に代理人を消費しましたが、詳細の大部分は私には隠されています(Microsoftに感謝します)。基本的なレベルでは、デリゲートインスタンスはメソッドへのポインタであることを理解しています(非常に単純化されていると思います)。

匿名メソッドは、基本的に、デリゲートのターゲットとして一般的に(排他的ではないにしても)作成されるインラインの名前のないメソッドであることを理解しています。

また、ラムダは構文を単純化するためにさまざまな方法で使用され、単純な匿名メソッドをデリゲートにポイントするために使用できることも理解しています。

私の説明のいずれかがここから大きく外れている場合はご容赦ください。これは、これらのトピックを理解するための基本的なレベルです。

したがって、課題は次のとおりです。

  1. これらの項目についての私の理解がさらに近い場合、少なくとも基本的なレベルで誰かに教えてもらえますか?私は複雑な難解な細目を探しているのではなく、基本的なものだけを探しています(今のところ)。

  2. プロジェクトにLINQを適用して合理的な効果を得る前に、これらの概念をどの程度真に理解する必要がありますか?私はそれを完全に理解し、時間を費やすことをいとわない。作品を制作する前に、これらすべてを完全に理解する時間がないかもしれません。

  3. 誰かが私にこれらの主題を説明し、それらを「現実世界」の例に適用するいくつかの良い記事を指摘して、トピックの基本とそれらの応用について頭を悩ませることができますか?私が現実の世界で意味するのは、抽象的な「ベクトルと形」や「動物と牛」ではなく、「顧客と請求書」の文脈でこれをどのように使用できるかということです。シナリオはデモンストレーションの目的でいくらか考案することができますが、厳密には学術的ではないことを願っています。オンラインや本でたくさんの例を見つけましたが、「平易な英語」の説明はほとんどないようです。

何卒よろしくお願い申し上げます。

0 投票する
8 に答える
23359 参照

python - Python: コールバック、デリゲート、...? 何が一般的ですか?

Python でイベントに反応する一般的な方法を知りたいだけです。コールバック関数、デリゲート、リスナー構造など、他の言語にはいくつかの方法があります。一般的な方法はありますか?どのデフォルト言語コンセプトまたは追加モジュールがあり、どれを推奨できますか?

0 投票する
4 に答える
4034 参照

c# - ループが 100% の CPU を使用し、終了しないのはなぜですか?

私はこの方法を持っています:

そして、プロセス (cmd.exe) からストリームを読み取ります。ユーザーが cmd.exe ウィンドウを閉じると、CPU 使用率が 100% に跳ね上がります。デバッガーで遊んでいると、sr.ReadLine() で停止し、戻ってこないことがわかります。これは StandardErrorStream と StandardOutputStream の両方を監視しているため、両方のコアで 100% を使用します。

必要に応じて、プロジェクトのコードをさらにいくつか示します。

もう 1 つの興味深い点は、想定どおりにコマンド ウィンドウが常に非表示になるとは限らないことです。最初は非表示にしますが、2 回目 (またはそれ以降) は非表示にしません。これは、ユーザーが cmd.exe ウィンドウを閉じて、readline の動作がおかしくなる場合です。また、終了しない限り、cmd に出力された最後の行を読み取ることはありません。

これを修正する方法について何か提案はありますか?

0 投票する
2 に答える
636 参照

c# - メソッド呼び出し間でキャッシュされるローカルに定義されたデリゲート (存在する場合) はどれですか?

これは私の他の質問で言及されており、記録に追加すると役立つかもしれないと思いました. 次のプログラムで、ローカルに定義されたデリゲートのうち、毎回最初から作成されるのではなく、Work メソッドの呼び出し間でキャッシュされるのはどれですか?

0 投票する
6 に答える
16517 参照

iphone - Objective-C でデリゲート パターンを実装する

NSURLConnection リクエストを処理するクラスを構築しています。他のクラスがこのクラスを使用できるようにするには、connectionDidFinishLoading が起動されたときにメイン クラスがデリゲートを呼び出せるようにします。

多くのドキュメントを調べましたが、明確な例を示すものは何も見つかりません。コードは何らかの理由でデリゲートを呼び出していません。私がこれまでに持っているコードは次のとおりです(関連性のないコードは削除されました):

インターフェース:

実装:

他のクラス内のデリゲート:

0 投票する
3 に答える
2964 参照

iphone - Objective-C の外部クラスとして委任する

Xcode と Interface Builder を使用して、iPhone 用の簡単なプロジェクトを作成しています。デリゲートとは何かは理解していますが、使用に問題があります。

インターフェイスに UITextField があります。ユーザーがキーボードをタップするとキーボードが表示されますが、キーボードを非表示にする方法を手動でプログラムする必要があります。デリゲートを使用して実行できます。したがって、IB では、ライブラリからオブジェクトを取得し、そのクラス名を Control1Delegate として指定し、テキスト フィールドからデリゲート アウトレットを接続して、この Control1Delegate にします。この Control1Delegate クラスの .m および .h ファイルもあります。

Control1Delegate.h

Control1Delegate.m

しかし、これはうまくいきません。実行中、textFieldShouldReturn メソッドに到達しないか、msg なしでクラッシュするか、EXEC_BAD_ACCESS でクラッシュします。面白いことに、メソッドをコントローラー ファイル (1 つのウィザードが生成したもの) に移動し、UITextField からこのコントローラー (ファイルの所有者) に接続すると、すべてが期待どおりに機能します。ほとんどのアップル コード チュートリアルでは、委譲されたメソッドを個別のクラスではなくランダムなオブジェクトに配置していることがわかりました。その理由を知りたいです。デリゲートを別のクラスに置くことはできませんか?

ここで何が欠けていますか?ヌルポインタ?オブジェクトのライフサイクル?

0 投票する
3 に答える
470 参照

c# - 比較のために .NET Framework に既存のデリゲートはありますか?

.NET フレームワークには、 や など、一般的なタスク用の便利な汎用デリゲートがいくつか用意されPredicate<T>ていEventHandler<T>ます。

CompareTo() に相当する組み込みのデリゲートはありますか?

署名は次のようになります。

これは、実際の並べ替えルーチン (具体的には ListView.ListViewItemSorter) にラムダ式を提供できるように並べ替えを実装するためです。他の方法は歓迎します。