2011-02-06 58 views
4

我只是通过“C#中的深度”浏览和偶然发现了下面的代码:添加两个函数?

Func<string> stringFunc =() => ""; 
Func<object> objectFunc =() => new object(); 
Func<object> combined = objectFunc + stringFunc; 

我敢肯定,新增两个函数是在数学意义的,那么,为什么任何程序员想要的二进制过载operator+的功能?这似乎是为什么超载运营商可能损害(并且我通常支持运营商重载的想法)的一个完美例子。

  1. 在C#中添加两个函数是什么意思? (我是C#noob,所以请耐心等待。)

  2. 您是否同意在这里重载operator+是一个设计错误?

  3. 什么会是一个更好的语法来实现不管它是什么operator+不会在这里?

+1

你通常不使用`MultiCastDelegates`与返回任何函数(返回类型不是`void`)。 – CodesInChaos 2011-02-06 14:53:09

回答

3

delegate1 + delegate2将创建它结合了前两种,要求在两个代表所有功能第三委托实例。
它主要用于事件。

Documentation

+0

啊哈,所以它就像解除(Haskell)逗号运算符(C++)? :)第一个函数的结果默默地被忽略了,然后呢?感觉非常困惑,我使用`运营商+`对于“方法链”的目的,但也许这只是我... – fredoverflow 2011-02-06 14:38:55

+0

@FredOverflow代表通常不会返回任何东西,所以通常会有什么可忽略。 – alex 2011-02-06 14:41:59

2

添加两个功能是在数学完全有意义。当你认为函数是运算符时,那么所有这些运算符的空间都是线性空间(在某些条件下)。这是一个非常高效的观点,可以产生大量有用的数学见解。

当然,这不是这里发生了什么,但我希望把你的权利你的问题的数学一面!