呼び出しのターゲットにnull
リファレンスを提供する場合は、Delegate.CreateDelegateオーバーロードを使用してこのケースを作成できます。そのページ上のMSDNの発言から
class Foo
{
public void Method()
{
Console.WriteLine(this == null);
}
}
Action<Foo> action = (Action<Foo>)Delegate.CreateDelegate(
typeof(Action<Foo>),
null,
typeof(Foo).GetMethod("Method"));
action(null); //prints True
:
firstArgumentがnull参照とメソッドがインスタンスメソッドである場合、 結果はデリゲート型タイプのシグネチャに依存し のメソッド: メソッドの明示的に隠された最初の パラメータが型のシグネチャに含まれている場合、その代理人は開いている インスタンスメソッドを表す。デリゲートが呼び出されると、 の引数リストの最初の引数が メソッドの隠しインスタンスパラメータに渡されます。方法およびタイプ一致の署名は(つまり、 タイプに互換性があるすべてのパラメータが)、次いでデリゲートが null参照にわたって閉鎖されていると言われる場合
•。デリゲートを呼び出すのは、ヌルインスタンスのインスタンス メソッドを呼び出すのと同じです。これは、 に特に有用なものではありません。
だから、それが知られているように、文書化、およびおそらくは、行動をを意図しています。
多分、メソッドはそのクラスによって実装されているインターフェイスからですか? – pythonian29033
すでにガベージコレクションされていますか?使用後にイベントハンドラの登録を忘れた可能性があります。 – Marcel
おそらくハンドラが属するオブジェクトが破棄されましたが、ハンドラはまだどこかのイベントにアタッチされていますか? – mao47