-3

ユーザーコントロールを作成したいと思っていますが、その前に、いくつかのことを行う方法、または可能かどうかを知る必要があります。メソッドを関数に渡すことができることを知っています(Link)。関数型の変数を設定することはできますか? たとえば、1 つの関数で GetData 関数を呼び出す必要があるユーザー コントロールがあります。各 GetData ルーチンは異なるため、その関数を aspx.cs ページから渡すことができるかどうか疑問に思っていましたか?

4

1 に答える 1

1

.NET Framework ライブラリでは、便利なジェネリック デリゲート (つまり、"関数型" と呼びます) が定義されています。戻り値を持つ関数デリゲート

Func<Ret>
Func<Arg, Ret>
Func<Arg1, Arg2, Ret>
...

戻り値を持たない関数デリゲート

Action<>
Action<Arg>
Action<Arg1, Arg2>
...

このようなデリゲートを受け入れるメソッドを定義できます

void DrawFunction(Func<double, double> function, double x0, double x1)
{
    const double step = 0.1;

    for (x = x0; x <= x1; x += step) {
        double y = function(x);
        DrawPointAt(x, y);
    }
}

適切なメソッドを渡すか、ラムダ式を使用して呼び出すことができます。

この宣言の使用

public double Square(double x)
{
    return x*x;
}

Square呼び出しを行うことができます (ここではこのメソッドを呼び出したくないため、括弧 () が後にないことに注意してください)。

DrawFunction(Square, 0.0, 10.0);

ラムダ式でも同じ結果が得られます

DrawFunction(x => x*x, 0.0, 10.0);
于 2012-05-10T23:21:09.447 に答える