是否有任何理由在 C# 中的 Action 上使用带有 void return 的函数?
Is there any reason to use a function with a void return over an Action in C#?
除了传统,我有什么理由要使用
void foo(int k) {
// stuff
}
超过
Action<int> foo = new Action
((k) => {
// stuff
});
更一般地说,正常定义我的函数而不是将它们定义为委托有什么实际优势吗?
当然,有很多充分的理由。想到的前三个:
几乎所有 C# 程序员都会对您极其不常见的过度使用委托感到非常惊讶。
函数可以是virtual
,可以用来实现接口
可以重新分配变量,甚至是委托类型的变量,这会导致非常意外的行为。
但还有更多。
Eric Lippert 在评论中提到函数可以重载,变量不能。
方法可以作为迭代器实现(使用 yield
关键字),匿名函数不能。
可以隐式调用一些特殊方法:new T { a, b, c }
查找名为 Add
的方法,而不是名为 Add
.
的变量
预定义的委托类型不允许您使用 ref
或 out
参数。
预定义委托类型不允许您向 return 类型或参数添加属性。
除了传统,我有什么理由要使用
void foo(int k) {
// stuff
}
超过
Action<int> foo = new Action
((k) => {
// stuff
});
更一般地说,正常定义我的函数而不是将它们定义为委托有什么实际优势吗?
当然,有很多充分的理由。想到的前三个:
几乎所有 C# 程序员都会对您极其不常见的过度使用委托感到非常惊讶。
函数可以是virtual
,可以用来实现接口
可以重新分配变量,甚至是委托类型的变量,这会导致非常意外的行为。
但还有更多。
Eric Lippert 在评论中提到函数可以重载,变量不能。
方法可以作为迭代器实现(使用 yield
关键字),匿名函数不能。
可以隐式调用一些特殊方法:new T { a, b, c }
查找名为 Add
的方法,而不是名为 Add
.
预定义的委托类型不允许您使用 ref
或 out
参数。
预定义委托类型不允许您向 return 类型或参数添加属性。