4

「C#in Depth」を参照して、次のコードを見つけました。

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

数学では2つの関数を追加しても意味がないと確信しているのに、なぜプログラマーoperator+が関数のバイナリのオーバーロードを必要とするのでしょうか。これは、演算子のオーバーロードが害を及ぼす可能性がある理由の完璧な例のようです(そして私は一般的に演算子のオーバーロードのアイデアをサポートしています)。

  1. C#で2つの関数を追加するとはどういう意味ですか?(私はC#の初心者なので、我慢してください。)

  2. ここでオーバーロードするのは設計上の間違いだったことに同意しoperator+ますか?

  3. ここで何をするかを達成するためのより良い構文は何でしょうoperator+か?

4

2 に答える 2

4

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

ドキュメンテーション

于 2011-02-06T14:24:32.630 に答える
2

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

もちろん、それはここで起こっていることではありませんが、私はあなたをあなたの質問の数学的な側面に正しく置きたかったのです!

于 2011-02-06T14:24:57.480 に答える