1

デリゲート、はい、この概念の使用法、C# でどのような問題を解決するのに役立つかを理解しようとしています。これまでのところ、コードを提供するデカップリング機能がとても気に入っています。次に、Predicate Delegates に出会いました。このMSDNライブラリの記事によると、それら、任意のデータ型パラメーターを取り、ブール型の値を返すデリゲートです... .

また、この特定のデリゲートはジェネリックを取り<T>、任意のタイプと言えます...

では、Predicate Delegate は単なる Boolean Delegate であると言うのは正しいでしょうか? つまり、ブール型の戻り値を持つデリゲートはありますか? または、別の名前で指定するためにそれ以上のものがあります: Predicate Delegates ..?

例えば

delegate bool BooleanDelegate(anytype parameter);
BooleanDelegate bd = new BooleanDelegate(yesno);     
//assuming parameter type is int
MessageBox.Show(bd.Invoke(2).ToString());

public bool yesno(anytype parameter)
{      
   If (parameter == 2)
    {
       return true;
    }
   Else
    {
       return false;
    }     
}
4

2 に答える 2

3

一般に、述語はブール値関数です。そうです、ブール値を返す関数はすべて述語です。

于 2013-02-23T20:45:56.850 に答える
2

はい、 aPredicate<T>は type の 1 つのパラメーターを受け取りT、 を返すメソッドを表しますbool。たとえば、 aPredicate<string>は、 a を受け取り、 astringを返すメソッドを表しますbool

例えば:

Predicate<string> p = String.IsNullOrEmpty;  // this static method has the correct signature and return type

あなたが言うことができる

bool answer = p("your words");

総称とはT、状況によって意味が異なることを意味します。StringPredicateしたがって、DateTimePredicate、 、などのデリゲート型を大量に作成する必要はありませんが、 、、 ...BicyclePredicateを使用できます。Predicate<DateTime>Predicate<Bicycle>

APredicate<T>の署名と戻り値の型は a と同じFunc<T, bool>です (.NET バージョン 3.5 で導入)。ではどちらも反変ですT

君は:

では、Predicate Delegate は単なる Boolean Delegate であると言うのは正しいでしょうか?

その署名は正しくなければなりません。パラメーターは必ず 1 つ (ゼロまたは 2 つ以上) ある必要があります。refパラメータはまたはであってはなりませんout。パラメーターは正しい型でなければなりませんT(ただし、の意味はT異なる場合があります)。たとえば、 を受け取るメソッドは であるBicycle可能性がありますが、Predicate<Bicycle>ではありませんPredicate<DateTime>

于 2013-02-23T20:57:46.617 に答える