2013-03-29 5 views
5

+ =表記を使用せずにデリゲートに新しい関数を追加するにはどうすればよいですか?C#でデリゲートを追加する

別の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チームによる設計上の決定です。

+0

あなたは 'のF#'で答えをしたいですか? –

+0

なぜなら、少なくとも+ =構文砂糖なしの場合 – nicolas

+0

あなたは質問にC#のタイトルがある。 –

答えて

6

これはF#で行う方法の1つです。あなたが原因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

それは私が見た唯一のものです。この文章の利点は、タイプセーフティを提供することであり、我々は自分自身で提供しなければなりません。 – nicolas

2

Delegate.Combine?

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

。唯一の方法..今、タイプセーフな方法でそれを包むために、cf padの答え。 – nicolas

関連する問題