Nếu tôi tạo ra một đại biểu trong mã của tôi như:delegate.Invoke hoạt động như thế nào?
delegate void dostuff (string o);
này tạo ra một lớp dẫn xuất từ System.MulticastDelegate
mà thực hiện ba phương pháp - Invoke
, BeginInvoke
và EndInvoke
.
Nếu tôi nhìn vào IL biên dịch cho Invoke
tất cả tôi thấy là:
.method public hidebysig newslot virtual
instance void Invoke(string o) runtime managed
{
} // end of method dostuff::Invoke
Phương pháp này không chứa mã. Gọi nó hoạt động - đại biểu được gọi, nhưng tôi không thể thấy nó như thế nào.
Trường hợp nào voodoo gọi Invoke thực sự gọi đại biểu đến từ đâu?
Nó chỉ là một phần của khuôn khổ cơ bản .Net - cuộc gọi * là * cuộc gọi để gọi. 'MyDelegate.Invoke()' là giống như 'MyDelegate()' –
MyDelegate() chỉ là cú pháp đường được biên dịch xuống MyDelegate.Invoke() - một cuộc gọi đến phương thức Invoke được tạo ra. IL cho cuộc gọi chỉ đơn giản là * callvirt instance void ConsoleApplication1.Program/dostuff :: Invoke (string) * mà không khác với bất kỳ cuộc gọi phương thức nào khác. –