printDelegate()與printDelegate.Invoke()

青云Zeo發表於2024-12-06
示例程式碼如下:

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()方法可以用在擁有該控制元件的執行緒上執行委託方法,一避免跨執行緒操作的異常。

相關文章