頭を包み込むことができないようです。
私が理解しているように、それは動的にロジックをクラスに追加しています。フレームワーク内のクラスはこれに備えていますか?
クラスを拡張して、拡張機能に機能を追加する必要があるのはなぜですか。私はグローバルにアクセス可能であり、保守がはるかに簡単です。
私は4つのファンクタータイプがあることを読みました:
Comparer
Closure
Predicate
Transformer
私たちはおそらくそれらのそれぞれを処理する必要があります。
ps vbにそのようなものはありますか?
つまり、ラムダ式はファンクターだと思います。これは私のために少し物事をクリアします:)(hehe)
- ラムダ式はファンクターですか?
- 匿名関数はファンクターですか?
しかし、私は別のタイプの機能、つまりこれらの機能に遭遇したため、この質問をしました。
delegate void FunctorDelegate(int value);
class Addition {
FunctorDelegate _delegate;
public Addition AddDelegate(FunctorDelegate deleg) {
_delegate += deleg;
return this;
}
public int AddAllElements(IList< int> list) {
int runningTotal = 0;
foreach( int value in list) {
runningTotal += value;
_delegate(value);
}
return runningTotal;
}
}
そして、これでそれを呼び出します:
int runningTotal = new Addition()
.AddDelegate(new FunctorDelegate(
delegate(int value) {
if ((value % 2) == 1) {
runningOddTotal += value;
}
}))
.AddDelegate(new FunctorDelegate(
delegate(int value) {
if ((value % 2) == 0) {
runningEvenTotal += value;
}
}))
.AddAllElements(list);
したがって、派手なラムダスタイルのものはありません。
今、私はこの例を持っていますが、これが「良い」解決策である理由はまったく明らかではありません。
デリゲート(ファンクター)は、プログラマーのショートカットとして「ほとんどの場合」ラムダ式または無名メソッドとして使用されますか?私が見る限り、それらが実際に問題に対して好まれる選択であるケースはごくわずかです。