問題タブ [anonymous-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.
c# - アクションのメソッド本体(テキスト)を取得することは可能ですか?
Action
いくつかのオブジェクトをキューに入れ、それぞれを介してスレッドプールが機能している状況がありますAction
。ただし、キューが空になる前にアプリケーションがシャットダウンした場合は、閉じる前にキューに残っているものをログに記録したいと思います。
Action
オブジェクトからメソッド本体を取得することは可能ですか?MethodBody
からオブジェクトを見ることができますがAction.Method.GetMethodBody()
、これを文字列として取得する方法がわかりません。
何か考えがありますか、それとも私は夢中ですか?
編集:もう1つ。状態情報も残しておきたいです。つまり、内で使用される変数の値も保持したいと思いますAction
。
c# - 匿名デリゲートが完了するまで、メソッドはどのように待機しますか?
連絡先を検索する次のコード スニペット (例として) があります。
更新:
ContactManager は次のとおりです。
メソッドは、Search
そのイベントが発生するまで返されません (私が気付いていなかった動作は、匿名メソッド/デリゲートの標準でした)。
ただし、匿名デリゲート用に生成されたコードが、Search
メソッドの完了時にメソッドにどのように通知するかについては混乱しています。
ContactManager.Address プロパティに Sleep(5000) を入れてみましたが、単に ContactManager から非常に迅速に返されたのかもしれないと思ったのですが、違いはありません。
誰でも光を当てることができますか?
c# - 匿名の代理人はいつイベントから削除されますか?
私が次のようなものを書くと
その匿名の代理人はいつ(もしあれば)イベントから削除されますか?
簡単な例として、私はこのプログラムを書くことができます
そして、「Enter」を繰り返し押したときの出力は
...など。行を追加できます
その後p.Foo()
ですが、まったく別の匿名の代理人を削除するため、もちろん効果はありません。
それで、これとの取引は何ですか?これらの匿名の代理人を削除する方法はありますか?たとえば、次のような式を使用してデータをプルする非同期Silverlightアプリケーションの意味は何ですか?
?これらの種類のコールバックはイベントを使用して実装されていないと思いますが、もちろんそれを伝えることは不可能です(?)。
注意深く説明されていない場合、匿名の代表者は危険ですか?
c# - クラスインスタンスから派生クラスに追加されたForm#FormClosedイベント(+ =)を削除しますか?
System.Windows.Form.Formから派生した「MyForm」があります。MyFormは、コンストラクターでハンドラーを設定したFormClosedイベントを処理します。インスタンス化されたMyFormオブジェクトが-=を使用してMyClass#FormClosedハンドラーを正常に削除することは可能ですか?それが重要な場合は、匿名メソッドを使用してFormClosedイベントをワイヤリングしています。
c# - 匿名メソッドのターゲットを取得する
次のメソッドは基本クラスの一部であり、派生クラスがイベントによって通知される相手を指定できるようにします。
特定の受信者のみに通知するには、次のような方法が使用されます:(受信者はもちろんサブスクライブする必要があります)
これは、受信者を「指し示す」デリゲートのみを発生させます。
ここでの私の問題は、匿名メソッドを使用してSomethingChangedイベントをサブスクライブする場合、このイベントを使用してサブスクライブしたオブジェクトに通知すると機能しないことです。
匿名メソッドを含むインスタンスを取得することは可能ですか?または、問題を解決するために完全に異なるアプローチを使用する必要がありますか?
c# - ジェネリック型へのキャストがC#での明示的なキャストよりも遅いのはなぜですか?
私はC#でメッセージディスパッチマップを作成しており、ほとんどの場合、いくつかの異なるアプローチで遊んでいます。測定しているパフォーマンスの違いに興味がありますが、ILを見てなぜかは明らかではありません。
メッセージマップ:
次に、WPFのEventArgsに似た、メッセージのクラス階層があります。次に例を示します。
およびハンドラー関数を持つオブザーバークラス:
ハンドラーを追加および呼び出す2つの方法を測定しています。デリゲートコールをラップしているので、概念的なタイプの安全性を少し得ることができ、そこにパフォーマンスの違いがあります。
アプローチ1:リスナーの呼び出し
アプローチ2:リスナーの呼び出し
どちらのアプローチも、キャストと同じメソッド呼び出しを行うMessageHandlerデリゲートを構築しますが、アプローチ#2を使用して構築されたデリゲートの呼び出しは、生成されたILが同じように見えても、少し遅くなります。ジェネリック型にキャストする際の余分な実行時オーバーヘッドですか?タイプ制約ですか?ジェネリック型が解決されると、JITtedデリゲートは同じになると思います。
情報をありがとう。
c# - 匿名の代表者にとって「動的」ですか?
変数の「動的」タイプを匿名のデリゲートで機能させる可能性があるのではないかと思います。
私は次のことを試しました:
しかし、次のエラーメッセージが表示されました。
Cannot convert anonymous method to type 'dynamic' because it is not a delegate type
残念ながら、次のコードも機能しません。
インラインで宣言されたものであっても、任意のタイプのデリゲートを受け入れるメソッドを作成したい場合はどうすればよいですか?
例えば:
c# - 高階関数の使い方から型引数を推測できない
次の高階関数があります。
そして、それをそのように呼び出そうとしています:
コンパイラで「型引数は使用法から推測できません」というエラーが表示されます。しかし、次の作品:
違いは何ですか?
string.IsNullOrWhiteSpace
はすでにまったく同じシグネチャを持つオーバーロードされていない関数です。
コメントで述べたように、以下も機能しますが、この場合に型推論が失敗する理由はまだ説明されていません。
c# - このタイプのデリゲートは何と呼ばれていますか(C#)
これらのコード行があります。
さて、私はこの声明を何と呼びますかprinter del = delegate { Method(); };
.
ここには名前付きメソッドがあるため、匿名メソッドと呼ぶことはできません。
c# - 匿名デリゲートイベントリスナーはガベージコレクションを防ぎますか?
次のシナリオで子ウィンドウをガベージコレクションできるかどうかはわかりません。
- ユーザーコントロールには「showpopup」コマンドが含まれています
- このコマンドは子ウィンドウを作成し、「Closed」イベントの匿名リスナーを追加します。
PopupCommand
のデリゲートにはまだローカルchild
変数への参照が含まれているように見えるので、メモリを呼び出すたびにPopupCommand
リークメモリが発生しますか?child
それとも、ガベージコレクターは、閉じられた後に破棄できることをどういうわけか認識しますか?