デリゲートを作成してデリゲートからイベントを作成する代わりに、他のクラスがサブスクライブできる単純なイベントをプログラムで作成する場合、デリゲートを作成する必要がないように、ActionまたはFuncのいずれかを使用してイベントを作成するだけです。
これを行うことの欠点はありますか?
実際には、私が考えることができる唯一の欠点は、(期待されるパラメーターと戻り値を超えて)論理的な意図がある場合、一般的なデリゲートを使用して失われる可能性があることをユーザーに満足させたいということです。
例えば:
public delegate void ClearAllValuesDelegate(MyClass X);
// ...
ClearAllValuesDelegate myDelegate;
vs:
Action<MyClass> myDelegate;
前者では、アクションが参照内のすべての値をクリアする必要があることは明らかです(もちろんこれを強制する方法はありませんが)。ただAction<>
それが何を必要とするかをあなたに伝えるだけで、他にはあまりありません。私が言ったように、これは単なる論理的な違いです。
しかし、実際には、私が認識している大きな欠点はありません。ほとんどの場合、私たちが使用するとき、私Func<>
たちAction<>
は単に、入力/出力のみを満たすターゲットを私たちに与えるように呼び出し元に求めています。
私にとっての主な違いは、次の違いです。
と:
明らかに、パラメータに名前を付けることには少なくともある程度の価値があります。
私見それは好みの問題です、CLRにとってそれは同じことです