如何在不使用+ =表示法的情况下向委托添加新函数?
我想知道如何从另一个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;
Run Code Online (Sandbox Code Playgroud)
编辑
正如丹尼尔在评论中所指出的那样,一个没有直接做到这一点的事实可能是dotnet团队的一项设计决定,即不要过多地改变队列.
这是在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)
Run Code Online (Sandbox Code Playgroud)