デリゲートには、複数のメソッドを登録できる・・・。
これをマルチキャストデリゲートという・・・。
デリゲートの追加は、
<デリゲート変数> += new <デリゲート名>(<実行するメソッド>)
<デリゲート変数> -= <削除対象のみのデリゲート変数>
bracketsにBrackets1を呼ぶデリゲートを登録したら、+=でBrackets2を呼ぶデリゲートを追加登録する・・・。
呼び出しは1回だけ・・・。
で、複数のデリゲートが登録されている場合、呼び出しはすべて行われるが、戻り値の結果は一番最後のものが返される・・・。
なので、
Brackets1、Brackets2、どちらも括弧を付けたあとの文字列をいったん出力している・・・。
そのあと、戻り値として返す・・・。
innerStr = (ABCDE) innerStr = <ABCDE> str = <ABCDE>
このように、Brackets1、Brackets2、どちらも呼ばれているが、最終的な戻り値strは後に登録したBrackets2のものになっている・・・。