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