2013-03-29 1 views
5

Wie fügt man einem Delegaten eine neue Funktion hinzu, ohne die + = -Notation zu verwenden?Hinzufügen von Delegaten in C#

Ich frage mich, wie man es von einem anderen CLR Sprache, nämlich F #. (Ich weiß, dass es viel schöne Art und Weise ist mit den Ereignissen in F # zu tun, aber ich bin neugierig ..)

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; 

bearbeiten

Wie von Daniel in den Kommentaren, die Tatsache, dass ein hat keine direkte Möglichkeit, dies zu tun, ist wahrscheinlich eine Design-Entscheidung von Dotnet-Team, die Warteschlange nicht zu viel zu mutieren.

+0

wollen Sie antworten in 'F #'? –

+0

warum nicht, zumindest ohne + = syntaktischer Zucker – nicolas

+0

nur, du hast Frage hat eine C# im Titel –

Antwort

6

Hier ist eine Möglichkeit, es in F # zu tun. Sie müssen einziehe aufgrund der Verwendung von 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) 
+0

ja das ist das einzige was ich gesehen habe. Der Vorteil dieses Schreibens ist, dass es Typsicherheit gibt, die wir selbst bereitstellen müssen. – nicolas

2

Delegate.Combine?

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

in der Tat. nur so .. jetzt, um das in einer Art sicheren Weg zu wickeln, siehe Pad's Antwort. – nicolas