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# 中执行此操作的一种方法。由于使用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

代表。合并?

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