2013-03-29 12 views
5

W jaki sposób można dodać nową funkcję do delegata bez użycia notacji + =?Dodawanie delegata w języku C#

Zastanawiam się, jak zrobić jego z innego CLR langage, a mianowicie F #. (Wiem, że są dużo ładniejsze sposobem radzenia sobie z wydarzeniami w F #, ale ja jest ciekawy ..)

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; 

Edytuj

Jak zauważył Daniel w komentarzach, że jednym nie ma bezpośredniego sposobu na zrobienie tego prawdopodobnie jest decyzją projektową zespołu dotnet, aby nie mutować zbyt dużo kolejki.

+0

chcesz odpowiedzieć '' F #? –

+0

dlaczego nie, przynajmniej bez + = cukru syntaktycznego – nicolas

+0

tylko, twoje pytanie ma C# w tytule –

Odpowiedz

6

Oto jeden sposób, aby to zrobić w F #. W przeglądarce musi być rzutowanie w dół z powodu użycia 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

tak, to jedyna rzecz, którą widziałem. Zaletą tego pisania jest zapewnienie bezpieczeństwa typu, które sami musimy zapewnić. – nicolas

2

Delegate.Combine?

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

. jedyny sposób .. teraz, aby opakować to w bezpieczny sposób, odpowiedź cf pad. – nicolas

Powiązane problemy