2011-02-06 92 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

添加兩個功能是在數學完全有意義。當你認爲函數是運算符時,那麼所有這些運算符的空間都是線性空間(在某些條件下)。這是一個非常高效的觀點,可以產生大量有用的數學見解。

當然,這不是這裏發生了什麼,但我希望把你的權利你的問題的數學一面!