很多时候,在我的程序中创建其他类可以订阅的简单事件而不是创建委托并从委托中创建事件时,我只是使用 Action 或 Func 创建事件以避免必须创建委托。
这样做有什么缺点吗?
不是真的,我能想到的唯一缺点是,如果你有一个逻辑意图(超出预期的参数和返回值),你希望用户满足,使用通用委托可能会丢失。
例如:
public delegate void ClearAllValuesDelegate(MyClass X);
// ...
ClearAllValuesDelegate myDelegate;
与:
Action<MyClass> myDelegate;
在前者中,很明显的意图是该操作应该清除引用中的所有值(尽管当然没有办法强制执行此操作)。而Action<>
只是告诉你需要什么,而不是其他。就像我说的,这只是逻辑上的差异。
但实际上我没有意识到有什么大的缺点。大多数时候,当我们使用时Func<>
,Action<>
我们只是要求调用者给我们一个只满足输入/输出的目标。
对我来说,主要区别在于:
和:
显然,命名参数至少有一些价值。
恕我直言,这是一个偏好问题,对于 CLR 来说,这是一回事