示例程式碼如下:
delete void PrintDeletegate();
void Print2()
{
//...若干行程式碼
}
void Main(){
//new一個委託
var printDeletegate = new PrintDeletegate(Print2);
//呼叫委託,以下兩種方式都可以
printDeletegate();
printDeletegate.Invoke();
}
那麼printDelegate()與printDelegate.Invoke()有什麼差異呢?
printDelegate()是C#2.0引入的,它是printDelegate.Invoke()的語法糖。
編譯器遇到printDelegate()時,會將它轉換為printDelegate.Invoke()。
Invoke()方法是委託型別本身提供的一個方法,用於顯示地呼叫委託所指向的方法。
另外, Invoke()方法在多執行緒環境下也有特殊用途:
Invoke()方法可以用在擁有該控制元件的執行緒上執行委託方法,一避免跨執行緒操作的異常。