147

これら3つの最も重要なデリゲートについて、誰かが(うまくいけば例を挙げて)良い説明を提供できますか:

  • 述語
  • アクション
  • 機能
4

8 に答える 8

191
  • Predicate: 本質的にFunc<T, bool>; 「指定された引数は、デリゲートによって表される条件を満たしていますか?」という質問をします。List.FindAll などで使用されます。

  • Action: 引数を指定してアクションを実行します。非常に汎用的です。基本的に、副作用を意味するため、LINQ ではあまり使用されません。

  • Func: LINQ で広く使用されます。通常は、複雑な構造を 1 つのプロパティに射影するなどして、引数を変換します。

その他の重要な代表者:

  • EventHandler/ EventHandler<T>: WinForms 全体で使用

  • Comparison<T>: 同様IComparer<T>ですが、デリゲート形式です。

于 2009-02-19T21:22:43.643 に答える
64

ActionFuncおよびPredicateすべてデリゲート ファミリーに属します。

Action: アクションは n 個の入力パラメーターを受け取ることができますが、void を返します。

Func: Func は n 個の入力パラメーターを受け取ることができますが、常に指定された型の結果を返します。Func<T1,T2,T3,TResult>ここで、T1、T2、T3 は入力パラメーターであり、TResult はその出力です。

Predicate: Predicate も Func の形式ですが、常に bool を返します。簡単に言えば、のラッパーですFunc<T,bool>

于 2015-05-14T10:08:05.327 に答える
10

ジョンの答えに加えて、

  • Converter<TInput, TOutput>: 本質的Func<TInput, TOutput>には ですが、セマンティクスがあります。List.ConvertAll と Array.ConvertAll で使用されますが、個人的には他では見たことがありません。
于 2010-01-04T23:02:38.220 に答える
4

MethodInvokerは、WinForms開発者が使用できるものです。引数を受け入れず、結果を返しません。これはActionよりも前のものであり、BeginInvoke()などが型指定されていないDelegateを受け入れるため、UIスレッドを呼び出すときに引き続きよく使用されます。アクションも同様に機能しますが。

myForm.BeginInvoke((MethodInvoker)delegate
{
  MessageBox.Show("Hello, world...");
});

また、ThreadStartとParameterizedThreadStartについても知っています。繰り返しますが、ほとんどの人は最近アクションを代用します。

于 2011-03-29T11:52:34.353 に答える
3

Predicate、Func、および Action は、.NET の組み込みデリゲート インスタンスです。これらのデリゲート インスタンスはそれぞれ、特定のシグネチャを持つユーザー メソッドを参照またはポイントできます。

アクション デリゲート - アクション デリゲート インスタンスは、引数を取り、void を返すメソッドを指すことができます。

Func デリゲート - Func デリゲート インスタンスは、可変数の引数を取り、何らかの型を返すメソッドを指すことができます。

述語 - 述語は func デリゲート インスタンスに似ており、可変数の引数を取り、bool 型を返すメソッドを指すことができます。

于 2012-03-11T19:09:02.680 に答える