我發現了兩種不同的方式來初始化一個代表與行動:行動委託:新的行動或鑄造行動?
創建一個新的行動或轉換爲行動。
Delegate foo = new Action(() => DoNothing(param));
Delegate bar = (Action)(() => DoNothing(param));
這2個語法有區別嗎?
哪一個更好?爲什麼?
編輯:
代表在本例中使用,因爲語法是調用像BeginInvoke的方法或lambda表達式調用有用的,投lambda表達式爲行動
static main
{
Invoke((Action)(() => DoNothing())); // OK
Invoke(new Action(() => DoNothing())); // OK
Invoke(() => DoNothing()); // Doesn't compil
}
private static void Invoke(Delegate del) { }
很重要
但有趣的是,編譯器授權此:
Action action =() => DoNothing();
Invoke(action);
您的編輯:什麼有意義內容會在你的靜態'Invoke'方法中出現嗎? – 2013-05-03 08:47:36
沒有什麼有趣的。問題的目的只是爲了理解2種語法之間的區別。我真正的實現是在WPF應用程序中,當我調用Dispatcher.Invoke()(http://msdn.microsoft.com/en-us/library/cc647509(v=vs.100).aspx) – Hyralex 2013-05-03 08:59:35
我明白了。你應該還記得'Action' ___是'Delegate',因爲'Action'來自'Delegate'。所以即使你使用了一個接受'Delegate'的重載,你也可以給它一個'Action'。例如:'Action bar =()=> DoNothing(param); someDispatcher.BeginInvoke(bar);'(參見[Dispatcher.BeginInvoke]](http://msdn.microsoft.com/zh-cn/library/cc190824.aspx))。補充:在.NET 4.5的新版本中,有''Dispatcher.Invoke'重載'Action',但這只是爲了方便起見,請參閱http://msdn.microsoft.com/en-us/library /hh199416.aspx。 – 2013-05-03 09:15:54