dotTrace プロファイラーを使用しているときに、多くの呼び出しをNamespaceName.ClassName.ctor>b__11
受けています (アプリケーションで Equatec プロファイラーを使用したとき、不思議な関数が呼び出されて同様の結果が得られましたNamespaceName.ClassName.<ctor>b__11
)。最初は のコンストラクターだと思っていましたが、 のコンストラクClassName
ター内のブレークポイントはClassName
1 回しかヒットしませんでした。私はこれが自動生成された関数であると仮定しています。ClassName
コンストラクターが一度しか呼び出されない場合、コンストラクターとはどのような関係がありますか?
質問する
253 次
1 に答える
4
おそらくコンストラクターで宣言されたラムダです。構文を使用してコンストラクター内のイベントにサブスクライブしましたか=>
、それとも頻繁に呼び出される何かをサブスクライブしましたか?
ラムダを使用すると、C# コンパイラはそれをプライベート メソッドに変換し、そのメソッドへのデリゲートを使用します。(変数のキャプチャを行っている場合は、その他の巧妙なトリックも使用できます。)
Reflector の他のクラスを見ると、C# コンパイラが各ラムダをメソッドに変換するときに、お気づきの命名規則に従って、各ラムダに番号を付けているように見え<methodName>b__<number>
ます。
于 2012-07-02T23:34:05.347 に答える