在C#中添加委托

时间:2013-03-29 13:23:04

标签: c# f# delegates

如何在不使用+ =表示法的情况下向委托添加新函数?

我想知道如何从另一个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团队的设计决定不会过多地改变队列。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

Delegate.Combine?

d = (Transformer) Delegate.Combine(d, new Transformer(Cube));