は: - Invoke
、BeginInvoke
とEndInvoke
delegate.Invokeはどのように機能しますか?私のような私のコードにデリゲートを作成する場合
delegate void dostuff (string o);
これは、3つのメソッドを実装しSystem.MulticastDelegate
から派生するクラスを生成します。
私はInvoke
用にコンパイルされたILを見れば、私が見るすべては次のとおりです。
.method public hidebysig newslot virtual
instance void Invoke(string o) runtime managed
{
} // end of method dostuff::Invoke
メソッドは、コードが含まれていません。それを呼び出すことは機能します - デリゲートが呼び出されますが、どのようにそれを行うのか分かりません。
Invokeを呼び出すブードゥーは実際にデリゲートを呼び出すのですか?
これは基本的な.Netフレームワークの一部です。*呼び出しは*呼び出す呼び出しです。 MyDelegate.Invoke()は、MyDelegate()と同じです。 –
MyDelegate()は、MyDelegate.Invoke()にコンパイルされた構文砂糖で、生成されたInvokeメソッドを呼び出します。コールのILは、単に* callvirtインスタンスvoid ConsoleApplication1.Program/dostuff :: Invoke(string)*であり、他のメソッド呼び出しと変わりません。 –