私には機能があります。この関数への参照を変数に追加したいと思います。変数内の関数を参照していますか?
私は関数のように変数 'bar'から 'foo(bool foobar)'という関数を呼び出すことができました。例えば。 'bar(foobar)'。
どのようにですか?
私には機能があります。この関数への参照を変数に追加したいと思います。変数内の関数を参照していますか?
私は関数のように変数 'bar'から 'foo(bool foobar)'という関数を呼び出すことができました。例えば。 'bar(foobar)'。
どのようにですか?
Func
を変数に保存して後で使用できるように思えます。例hereを見てみましょう:convertMethod(name)
:
using System;
public class GenericFunc
{
public static void Main()
{
// Instantiate delegate to reference UppercaseString method
Func<string, string> convertMethod = UppercaseString;
string name = "Dakota";
// Use delegate instance to call UppercaseString method
Console.WriteLine(convertMethod(name));
}
private static string UppercaseString(string inputString)
{
return inputString.ToUpper();
}
}
は方法UppercaseString
は、後で呼び出すことができますconvertMethod
という変数に保存する方法を参照してください。
関数の署名を知り、delegateを作成する必要があります。
既製のデリゲートfor functions that return a valueとfor functions that have a void return typeがあります。前の両方のリンクは、最大15種類までのタイプの引数を取ることができるジェネリック型を指しています(したがって、その数多くの引数をとる関数に役立つことがあります)。
ローカルスコープより大きなスコープ内の関数への参照を使用する場合は、defining your own custom delegatesと考えることができます。しかし、ほとんどの場合、Action
とFunc
は非常にうまくいきます。
更新:
独自のデリゲートを定義するかどうかの選択に関するthis questionを見てみましょう。
代表者が検討されましたが、将来的には400を超えるものがありますが、すべてが同じ署名や戻り値を使用するわけではありません。 –
使用して、デリゲート
void Foo(bool foobar)
{
/* method implementation */
}
。
bool foobar = true;
Bar(foobar);
私はそれを行うことができると思います。しかし、Func <>メソッドを使用すると、最大4つのパラメータを持つことができます。私はおそらくこれを使って得ることができますが、限界を乗り越えることができればいいと思います。 –
@Ruirize:興味深いことに、私は決してその限界に遭遇していないので、私はそれについて知らなかったと思う。しかし、以前ここでカバーされていたように見えるので、どちらも見てみるべきです:http://stackoverflow.com/questions/3582866/func-for-5-arg – David
それは素晴らしいですね!しかし、私は各ユニットのためにこれらの多くを作らなければならない場合、私はおそらくちょうど私のルアインタープリターを使用します。 –