できます。 デリゲートは、メソッドの単なるラッパーではなく、本格的なクラスであり、クラスは親クラスでネストするか、単にグローバルスコープで宣言することができます。 つまり、デリゲートは、クラスを定義できる場所であればどこでも定義できます。
internal class Feedback : System.MulticastDelegate {
もう1つの興味深い質問は、デリゲートクラスコンストラクターに2つのパラメーターが含まれていることです。コードでは、ポインターをメソッド(このメソッドを見つけるCLRの内部)に渡すだけですか。
delegate void Test(int value); void A(int v) { Console.WriteLine(v); } void TestDelegate() { var t = new Test(A); t(1); }
すべてが単純です-デリゲートを作成するときに、コンパイラがコンストラクタ内の
オブジェクトパラメータの値を置き換えるためです。 デリゲートを初期化するメソッドが静的な場合、nullが渡されます。 それ以外の場合、メソッドが属するクラスインスタンスのオブジェクトが渡されます。 この場合、このオブジェクトの状態は、メソッド内の
thisキーワードを介して変更できます。