問題タブ [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.
java - Javaの関数ポインタ/デリゲート?
私のJavaゲームサーバーでは、基本的にパケットの目的をサーバーに伝えるパケットのアクションIDを送信します。各アクション ID (整数) を関数にマップしたいと考えています。スイッチを使わずにこれを行う方法はありますか?
.net - 私はまだデリゲートを取得していません
デリゲートの使用は、いくつかの非同期ケースに役立つのではないでしょうか? 次のことを試しましたが、UI がまだハングします。一体いつデリゲートを使用しますか?
iphone - デリゲートが有効かどうかを確認するにはどうすればよいですか?
私はこのようなことをしています:
所有するコードはMyObject
、デリゲートを設定してコールバック関数を受け取ります。
次にMyObject
、非同期関数呼び出しの結果として、デリゲートにシグナルを返します。
有効なメモリ クリーンアップの結果としてデリゲートが解放された場合を除いて、ほとんどの場合、すべてがうまく機能しているようです。この場合、コールバックを実行したくないだけです
デリゲートが有効かどうかを確認する最良の方法を知っている人はいますか?
私は次のようなあらゆる種類のことを試しました:
運がない。
c# - デリゲート内の変数のスコープ
私は次のことをかなり奇妙に感じました。繰り返しになりますが、私は主に動的言語でクロージャーを使用してきましたが、これは同じ「バグ」の疑いがあるべきではありません。以下は、コンパイラを不幸にします:
それは言います:
「i」という名前のローカル変数をこのスコープで宣言することはできません。これは、「子」スコープで他の何かを示すために既に使用されている「i」に別の意味を与えるためです。
したがって、これは基本的に、デリゲート内で宣言された変数が宣言された関数のスコープを持つことを意味します。私が期待していたものとはまったく異なります。私は関数を呼び出そうとさえしていません。少なくとも Common Lisp には、変数を本当にローカルにしたい場合は、変数に動的な名前を付ける必要があると言う機能があります。これは、リークしないマクロを作成する場合に特に重要ですが、このような場合にも役立ちます。
だから、この問題を回避するために他の人が何をしているのか疑問に思っていますか?
明確にするために、デリゲートで宣言する変数がデリゲートの後に宣言された変数に干渉しないソリューションを探しています。そして、デリゲートの前に宣言された変数を引き続きキャプチャできるようにしたいと考えています。
c# - マルチスレッド方式での BeginInvoke/EndInvoke の使用。AsyncCallback、AsyncWaitHandle、IsCompleted はどのように相互作用しますか?
この質問に対する Andreas Huber の回答Concurrent<T>
により、ThreadPool の代わりに非同期デリゲートを使用して実装するというアイデアが得られました。AsyncCallback
ただし、が に渡されたときに何が起こっているのかを理解するのが難しくなっています。BeginInvoke
特に、複数のスレッドが にアクセスしている場合はそうIAsyncResult
です。残念ながら、このケースは MSDN や私が見つけたどこでもカバーされていないようです。さらに、私が見つけたすべての記事は、クロージャーとジェネリックが利用可能になる前に書かれたか、単にそのように見えます。いくつかの質問があります (答えが正しいことを願っていますが、がっかりすることは覚悟しています):
1) クロージャを AsyncCallback として使用すると違いはありますか?
(うまくいかないことを願っています)
2) スレッドが で待機している場合、
a) コールバックが開始する前、または b) 終了後にAsyncWaitHandle
通知されますか?
(できれば b)
3) コールバックが実行されている間、何が返されますか? 私が見ることができる可能
性: b) ; c)コールバックが EndInvoke を呼び出す前、後。
(願わくば b または c)
4)呼び出された後にスレッドが待機すると、スローされますか?
(そうではないことを願っていますが、私はそう期待しています)。IsCompleted
true
false
false
true
DisposedObjectException
AsyncWaitHandle
EndInvoke
答えが私が望んでいるものであれば、これはうまくいくようです:
質問 1 から 3 への回答が私が望んでいるものである場合、私が見る限り、ここにレース条件はないはずです。
c# - C# 3.0 ジェネリック型推論 - デリゲートを関数パラメーターとして渡す
同じメソッドのデリゲートを暗黙的に作成できるのに、ジェネリック関数にパラメーターとして渡されたときに、C# 3.0 コンパイラーがメソッドの型を推測できないのはなぜでしょうか。
次に例を示します。
foo
に渡してbar
、渡される関数のシグネチャからコンパイラに型を推測させることができると思っていAction<T>
ましたが、これは機能しません。ただし、キャストせずにAction<int>
fromを作成できるfoo
ので、コンパイラが型推論を介して同じことを行うことができないという正当な理由はありますか?
c# - プレーンなデリゲートパラメーターとして提供されたときにラムダ式をキャストする必要があるのはなぜですか
System.Windows.Forms.Control.Invoke(Delegateメソッド)メソッドを使用します
なぜこれがコンパイル時エラーを引き起こすのですか?
しかし、これは正常に機能します。
メソッドがプレーンなデリゲートを期待するのはいつですか?
c# - リモート オブジェクトの DynamicInvoke は非同期で動作しますか?
ここで理解しようとしている主にスパゲッティ コード (C#/VB の組み合わせ) をいくつか継承しました。
これは、次の形式のデリゲートの DynamicInvoke メソッドを呼び出すことによって行われる、リモート オブジェクトへのイベントを発生させるための 2 つの連続した呼び出しがあるという、非常に奇妙な状況のようです。
delegate1 と delegate2 はどちらも、同じリモート「サブスクライバー」オブジェクトのメソッドを参照しています。
ドキュメントで読むことができるすべてによると、DynamicInvokeは同期する必要があるようです。しかし、リモート プロセスにブレークポイントを設定すると、デリゲート 1 とデリゲート 2 によって参照されるメソッドが異なるスレッドで同時に実行されていることが目の前でわかります。
これは別のマイクロソフトの「文書化されていない機能」ですか? 私はこれを期待すべきでしたか?なぜこれが必要なのかについての説明はありますか?また、非同期で実行することを意図している場合、DynamicInvoke はどのようにして戻り値を取得できるのでしょうか?
ありがとう!シャウル
c# - C# デリゲートの署名をその型で取得できますか?
デリゲートの型情報がある場合、リフレクションを使用してデリゲートのパラメーター リストを取得する簡単な方法はありますか?
たとえば、デリゲート型を次のように宣言するとします。
その後、次のようにそのデリゲート型の型情報を取得します
その型情報オブジェクトから戻り値の型 (double) とパラメーター リスト ({string, bool}) を取得することは可能ですか?
vb.net - 動的 AddressOf
動的デリゲートを参照する最良の方法は何ですか? 構成データベースから返されたメソッド名を使用して、次のことを行いたいと思います。