5

+= 表記を使用せずにデリゲートに新しい関数を追加するにはどうすればよいですか?

別の CLR 言語、つまり F# からどうやってそれを行うのだろうか。(F# でイベントを処理するもっと良い方法があることは知っていますが、興味があります..)

static int Square (int x) { return x * x; }
static int Cube(int x) { return x * x * x; }
delegate int Transformer (int x);

Transformer d = Square ;
d += Cube;

編集

コメントでダニエルが指摘したように、これを行う直接的な方法がないという事実は、おそらくキューをあまり変更しないという dotnet チームによる設計上の決定です。

4

2 に答える 2

6

F# でそれを行う 1 つの方法を次に示します。Delegate.Combineを使用しているため、ダウンキャストが必要です。

let square x = x * x
let cube x = x * x * x

type Transformer = delegate of int -> int

let inline (++) (a: 'T) (b: 'T) = 
    System.Delegate.Combine(a, b) :?> 'T

let d = Transformer(square)
let e = d ++ Transformer(cube)
于 2013-03-29T14:02:25.990 に答える
2

Delegate.Combine?

d = (Transformer) Delegate.Combine(d, new Transformer(Cube));
于 2013-03-29T13:59:23.250 に答える