4

デリゲート自体が呼び出されたときにすべてのパラメーターが渡されるため、デリゲートで静的メソッドを呼び出す方法は非常に単純に思えます。
ただし、インスタンス メソッドがデリゲートに追加されると、「this」パラメーターはデリゲートの呼び出し中に無視されるように見えるため、デリゲート自体と一緒に保存されるとしか想像できません。クロージャーが他のメソッドでできることと同様です。パラメーター。

Q:インスタンス メソッドがデリゲートに渡されると、コンパイラによってクロージャが作成されますか? それとも、これを実現する別のメカニズムがありますか?

4

2 に答える 2

8

いいえ。

Delegateクラスには、メソッドを呼び出すときに渡す値を格納するプロパティがTargetあります。 つまり、実際には、関数ポインターと最初のパラメーターの値の2 つが格納されます。 this
Delegate

ターゲットを含むデリゲートは、最初のパラメーターを閉じるため、クローズド デリゲートと呼ばれます。

実際、これはクロージャーがどのように機能するかです。コンパイラは、デリゲートのクロージャを作成するときに、閉じられた変数を保持するクラスを作成し、そのクラスをデリゲートの として格納しTargetます。

詳細については、私のブログ投稿を参照してください。

于 2012-12-30T16:57:54.390 に答える
2

(基礎となる)デリゲートクラスを見てください。インスタンスを定義するというメンバーTargetを定義します。静的メソッドの場合Target、クラス自体に関連付けられています。

于 2012-12-30T17:01:35.527 に答える