Action で Delegate を初期化する 2 つの異なる方法を見つけました。
新しいアクションを作成するか、Action にキャストします。
Delegate foo = new Action(() => DoNothing(param));
Delegate bar = (Action)(() => DoNothing(param));
この2つの構文に違いはありますか?
どちらが優れているのか、その理由は?
この例でデリゲートが使用されているのは、ラムダ式を使用して BeginInvoke や Invoke などのメソッドを呼び出すのに構文が便利であり、ラムダ式をアクションにキャストすることが重要であるためです。
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);