C#のメソッドはメソッドを返すことができますか?
たとえば、メソッドは ラムダ式 を返す可能性がありますが、メソッドがType
ではないため、そのようなメソッドにどのような種類のパラメーターを指定できるかわかりません。このような返されたメソッドは、一部のデリゲートに割り当てることができます。
この概念を例として考えます。
public <unknown type> QuadraticFunctionMaker(float a , float b , float c)
{
return (x) => { return a * x * x + b * x + c; };
}
delegate float Function(float x);
Function QuadraticFunction = QuadraticFunctionMaker(1f,4f,3f);
あなたが探しているタイプはAction<>
またはFunc<>
。
両方のタイプのジェネリックパラメーターは、メソッドのタイプシグネチャを決定します。メソッドに戻り値がない場合は、Action
を使用します。戻り値がある場合は、Func
を使用します。最後のジェネリックパラメーターは戻り値の型です。
例えば:
public void DoSomething() // Action
public void DoSomething(int number) // Action<int>
public void DoSomething(int number, string text) // Action<int,string>
public int DoSomething() // Func<int>
public int DoSomething(float number) // Func<float,int>
public int DoSomething(float number, string text) // Func<float,string,int>
public Func<float, float> QuadraticFunctionMake(float a, float b, float c) {
return x => a * x * x + b * x + c;
}
戻り値の型はFunc<float, float>
。
<unknown type>
= Function
。あれは、
public Function QuadraticFunctionMaker(float a , float b , float c)
{
return (x) => { return a * x * x + b * x + c; };
}
デリゲートFunction
をすでに一致すると宣言しているので、これがあなたが探しているものです。または、デリゲートを宣言する必要がまったくなく、Func<float, Float>
他の人が気づいたように。これはまったく同じです。実際には、 Func<T, T>
は、ジェネリックであることを除いて、デリゲートFunction
とまったく同じ方法で宣言されます。
あなたのラムダ式はfloat
をパラメーターとして受け取り(私はそう思います)、次にfloat
も返します。 。NET では、タイプFunc<float, float>
でこれを表すことができます。
一般に、より多くのパラメーターをとるラムダを扱う場合は、最大8つのパラメーターを持つFunc<Type1, Type2, Type3, ..., ReturnType>
を使用できます。