2010-12-19 19 views
5

私には機能があります。この関数への参照を変数に追加したいと思います。変数内の関数を参照していますか?

私は関数のように変数 'bar'から 'foo(bool foobar)'という関数を呼び出すことができました。例えば。 'bar(foobar)'。

どのようにですか?

答えて

17

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という変数に保存する方法を参照してください。

+0

私はそれを行うことができると思います。しかし、Func <>メソッドを使用すると、最大4つのパラメータを持つことができます。私はおそらくこれを使って得ることができますが、限界を乗り越えることができればいいと思います。 –

+0

@Ruirize:興味深いことに、私は決してその限界に遭遇していないので、私はそれについて知らなかったと思う。しかし、以前ここでカバーされていたように見えるので、どちらも見てみるべきです:http://stackoverflow.com/questions/3582866/func-for-5-arg – David

+0

それは素晴らしいですね!しかし、私は各ユニットのためにこれらの多くを作らなければならない場合、私はおそらくちょうど私のルアインタープリターを使用します。 –

0

関数の署名を知り、delegateを作成する必要があります。

既製のデリゲートfor functions that return a valuefor functions that have a void return typeがあります。前の両方のリンクは、最大15種類までのタイプの引数を取ることができるジェネリック型を指しています(したがって、その数多くの引数をとる関数に役立つことがあります)。

ローカルスコープより大きなスコープ内の関数への参照を使用する場合は、defining your own custom delegatesと考えることができます。しかし、ほとんどの場合、ActionFuncは非常にうまくいきます。

更新:

独自のデリゲートを定義するかどうかの選択に関するthis questionを見てみましょう。

1

Delegatesをお探しですか? Actionデリゲート

Public Action<bool> Bar; 
Bar = Foo; 

通話機能を使用して

+0

代表者が検討されましたが、将来的には400を超えるものがありますが、すべてが同じ署名や戻り値を使用するわけではありません。 –

0

使用して、デリゲート

void Foo(bool foobar) 
    { 
/* method implementation */ 
    } 

bool foobar = true; 
Bar(foobar); 
関連する問題