2

dotTrace プロファイラーを使用しているときに、多くの呼び出しをNamespaceName.ClassName.ctor>b__11 受けています (アプリケーションで Equatec プロファイラーを使用したとき、不思議な関数が呼び出されて同様の結果が得られましたNamespaceName.ClassName.<ctor>b__11)。最初は のコンストラクターだと思っていましたが、 のコンストラクClassNameター内のブレークポイントはClassName1 回しかヒットしませんでした。私はこれが自動生成された関数であると仮定しています。ClassNameコンストラクターが一度しか呼び出されない場合、コンストラクターとはどのような関係がありますか?

4

1 に答える 1

4

おそらくコンストラクターで宣言されたラムダです。構文を使用してコンストラクター内のイベントにサブスクライブしましたか=>、それとも頻繁に呼び出される何かをサブスクライブしましたか?

ラムダを使用すると、C# コンパイラはそれをプライベート メソッドに変換し、そのメソッドへのデリゲートを使用します。(変数のキャプチャを行っている場合は、その他の巧妙なトリックも使用できます。)

Reflector の他のクラスを見ると、C# コンパイラが各ラムダをメソッドに変換するときに、お気づきの命名規則に従って、各ラムダに番号を付けているように見え<methodName>b__<number>ます。

于 2012-07-02T23:34:05.347 に答える