問題タブ [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.
.net - テンプレート化されたデリゲート
次のコードパターンがあります。
唯一の違いは、戻り値の型と、メソッドへのパラメーターの数と型が異なる可能性があることです。
「いくつかの作業を行う」部分を除くすべてのコードを処理する汎用/テンプレート化されたメソッドを作成したいのですが、どうすれば実現できますか。
c# - イベント宣言に匿名の空のデリゲートを追加することの欠点はありますか?
私はこのイディオムについていくつかの言及を見てきました(SOを含む):
利点は明らかです。イベントを発生させる前に null をチェックする必要がなくなります。
ただし、欠点がある場合は理解したいと思っています。 たとえば、広く使用されていて、メンテナンスの手間がかからないほど十分に透過的なものですか? 空のイベント サブスクライバー呼び出しのパフォーマンス ヒットはかなりありますか?
c# - C# イベント処理 (Java との比較)
現在、デリゲートを使用して C# でイベントを理解し、実装するのに苦労しています。私はJavaのやり方に慣れています:
- 多数のメソッド定義を含むリスナー タイプのインターフェイスを定義します。
- リスナーで定義されたすべてのイベントに興味がない場合は、そのインターフェイスのアダプター クラスを定義して作業を容易にします。
- イベントを発生させるクラスで Add、Remove、および Get[] メソッドを定義します。
- 保護された fire メソッドを定義して、追加されたリスナーのリストをループし、正しいメソッドを呼び出すという汚い作業を行います
これは私が理解しています(そして好きです!)-これをc#でもまったく同じようにできることは知っていますが、c#用の新しい(より良い?)システムが整っているようです。C# でのデリゲートとイベントの使用を説明する数え切れないほどのチュートリアルを読んだ後、何が起こっているのかを本当に理解するにはまだ近づいていません :S
要するに、次のメソッドについて、イベント システムを c# で実装するにはどうすればよいでしょうか。
^ 上記のメソッドは、私がかつて作成した Java アプリケーションから取得したもので、これを c# に移植しようとしています。
大変感謝します!
.net-2.0 - nullデリゲートを使用したイベントハンドラーの動作の違い.net 1.1と2.0
ここで何が起こっているのか正確にはわかりませんが、.NET 1.1 では初期化されていないイベント デリゲートを問題なく実行できるようですが、.NET 2.0 以降では NullReferenceException が発生します。理由は何でも。以下のコードは、1.1 では問題なく正常に実行されますが、2.0 では NullReferenceException が発生します。なぜ違う振る舞いをするのか興味がありますか?何が変わったのですか?
ありがとう
例えば
c++ - アンマネージ C++ で (デリゲートから) マネージ例外をキャッチするにはどうすればよいですか?
Marshal::GetFunctionPointerForDelegate によって提供される関数ポインターを介してマネージド デリゲートを呼び出すアンマネージド C++ があります。このデリゲートは、例外をスローする可能性があります。アンマネージ C++ でこの例外を適切に処理して、ポインターのクリーンアップなどを確実に行い、例外をより多くのマネージ コードに再スローできるようにする必要があります。コール スタックは次のようになります。
マネージド コード -> アンマネージド C++ -> デリゲートを介したマネージド コードへのコールバック (ここで例外をスローできます)。
アンマネージ コード内のリソースをクリーンアップし、コール スタック全体を開始したマネージ コードに使用可能な例外をスローできるように、この状況を適切に処理するためのポインタを持っている人はいますか?
c# - C# で匿名メソッドのサブスクライブを解除する
イベントから匿名メソッドのサブスクライブを解除することは可能ですか?
このようなイベントにサブスクライブすると:
次のように登録解除できます。
しかし、匿名の方法を使用してサブスクライブすると、次のようになります。
この匿名メソッドの登録を解除することはできますか? もしそうなら、どのように?
delegates - ラムダ式を説明できますか?
ラムダ式は実際には取得しません。それらはALGOLの時代から存在していましたが、PythonとRubyが非常に人気になったごく最近まで、私はそれらについて聞き始めませんでした。C#に=>
構文が追加されたので、私の世界(.NET)の人々はますますlamdba式について話し合っています。
ラムダ計算に関するウィキペディアの記事を読んだことがありますが、私は実際には数学者ではありません。実用的な観点からはよくわかりません。ラムダ式はいつ使用しますか?なんで?それが私がすべきことだとどうやって知ることができますか?
ラムダ式の問題を前後の形式で解決する方法の例を示していただけますか?命令型言語であれば問題ありませんが、C#が最も理解しやすいでしょう。
delegates - Exchange Web サービスでデリゲートを使用する
exhnage Web サービスでデリゲートを使用したことのある人はいますか? Exchange で 1 人のユーザーが他のユーザーの予定表を制御できるようにしたいと考えています。この問題は少し難しいと思います。他の人がどのように適切に機能させることができたのか見てみたいと思います。
c# - C# 2.0 には、匿名でタイプ セーフなジェネリック デリゲート シグネチャはありますか?
関数A
へのジェネリックのデリゲートを考えてみましょう。B
Fun
次に、デリゲートを受け入れて呼び出す関数を記述します。
(書くのが賢明かどうかは気にしないでくださいinvokeFun
。)
デリゲートに名前を付けinvokeFun
ずに書くことはできますか? 私はこのようなものがうまくいくことを期待していますが、そうではありません:Fun
c# - 部分型情報による非同期デリゲート呼び出しの終了
BeginInvoke/EndInvoke パターンを使用して非同期メソッドの実装を記述する場合、コードは次のようになります (これがキャッシュの非同期ラッパーであると推測しなくても済むようにするためです)。
デリゲートの型がわかっているため、キャストできるため、これは完全にうまく機能します。Put
ただし、メソッドが void を返しますが、呼び出しを終了するには、メソッドを強く型付けされたデリゲートにキャストする必要があるように見えるため、2 つのメソッドがあると面倒になり始めます。
デリゲートについて気にするのは戻り値の型 (この場合は void) だけであり、提供された引数ではないため、これを行うためのよりクリーンな方法があることを願っています。しかし、私は頭を悩ませ、オフィスの他の人に尋ねましたが、誰も答えを思いつくことができません.
1 つの解決策が custom を作成することであることはわかっていますが、これIAsyncResult
は の遅延インスタンス化などの潜在的なスレッド化の問題を伴う非常に難しい作業であり、WaitHandle
そのルートをたどるよりも、この少しハックなコードを使用したいと考えています。
is
チェックのカスケード セットなしで呼び出しを終了する方法についてのアイデアはありますか?