2011-02-06 20 views
4

私は「深さのC#」を通じて閲覧し、次のコードにつまずい:2つの関数を追加しますか?

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

私は2つの機能を追加すると、数学では無意味であることをかなり確信しているので、なぜすべてのプログラマは、バイナリの過負荷を望みます機能のためのoperator+?これは、なぜオーバーロード演算子が害を及ぼすのかを示す完璧な例のようです(一般に、演算子のオーバーロードの考え方をサポートしています)。

  1. C#で2つの関数を追加するとはどういう意味ですか? (私はC#noobですので、私と一緒にご負担ください)

  2. operator+ここにオーバーロードするのは間違いでしょうか?

  3. operator+は何でも実現するためのより良い構文は何でしょうか?

+1

通常は何も返さない関数(return-typeは 'void'ではありません)で' MultiCastDelegates'を使用しません。 – CodesInChaos

答えて

3

書くdelegate1 + delegate2は、最初の2つを組み合わせた第3のデリゲートインスタンスを作成し、両方のデリゲートのすべての関数を呼び出します。
主にイベントを対象としています。

Documentation

+0

ああ、コンマ演算子(C++)を持ち上げる(ハスケル)のようなものですか? :)最初の関数の結果は静かに無視されます。 "メソッドチェイン"の目的のために 'operator +'を使うのは非常に混乱していますが、それはちょうど私だけです... – fredoverflow

+0

@FredOverflowデリゲートは通常何も返さないので、通常無視することはありません。 – alex

+0

@alex:本当ですか?ですから 'Func 'を2つ追加すると 'Func '( 'Func 'の代わりに)が得られますか? – fredoverflow

2

二つの機能を追加する数学で完全に意味があります。関数が演算子であるという見方をすると、そのような演算子のすべてのスペースは(特定の条件の下で)線形スペースになります。これは、非常に生産的な観点から、数学的に有用な多くの洞察をもたらします。

もちろん、これはここでは起こっていませんが、私はあなたの質問の数学的な面にあなたを置いていたかったのです!

+0

例を明確にすることはできますか? 'binary plus' +' binary multiply'はどういう意味ですか? – fredoverflow

+0

同一のドメインと共同ドメインを持つ関数の空間に、どういうふうに追加を定義することができるかを見ることができますが、この場合関数は異なる共同ドメインを持っていますか? –

+1

@FredOverflow:その場合、定義が可能です。 –

関連する問題