0

呼び出しに使用できる C# の標準デリゲートはありますか。呼び出す必要がある新しい関数シグネチャごとに、新しいデリゲートを宣言する必要がありますか?

今、私はそれらの署名を持っています。しかし、リターンとパラメーターの複雑さに対してネイティブデリゲートを使用できれば、それは素晴らしいことです。

public bool isDone()
{...}
public void doStuff()
{...}
public void doMoreStuff(object o)
{...}
public void doEvenMoreStuff(string str)
{...}

// I'm declaring my "custom" delegates like this:
private delegate bool delegate_bool();
private delegate void delegate_void(string line);

// and calling via
if (InvokeRequired)
    Invoke(new delegate_void(doStuff), new object[] { });
else
    {...}


編集:答えはAction<>Func<>のようです。

if (InvokeRequired)
    return Invoke(new Func<bool>(isDone), new object[] { });
else
    {...}
if (InvokeRequired)
    BeginInvoke(new Action(doStuff), new object[] { });
else
    {...}
if (InvokeRequired)
    BeginInvoke(new Action<string>(doEvenMoreStuff), new object[] { "hello world" });
else
    {...}
4

6 に答える 6

5

探しているのは、Action<*>まさにFunc<*>それを行うデリゲートです。

于 2013-03-12T16:29:08.213 に答える
4

およびデリゲートはAction<>Func<>可能な限り使用する必要がある "標準" のデリゲートです。使用できない状況はほとんどありません。

特に、オプションの引数refまたはoutパラメーターがある場合、16 個を超えるパラメーターがある場合、またはパラメーターがある場合は、params別の (または独自のカスタム) デリゲートを使用する必要があります。

于 2013-03-12T16:29:41.390 に答える
2

Action<>およびFunc<>デリゲートは、必要なものを提供します

于 2013-03-12T16:29:22.067 に答える
2

Action<>Func<>は、これらのタイプのタスクを実行できます。

于 2013-03-12T16:29:33.277 に答える
2

Actionはい、ラムダを使用できます。たとえば、 Dispatcher.Invoke にはデリゲートが必要ですが、ラムダを Action にキャストできるため、新しいデリゲートを定義する必要はありません。

Dispatcher.Invoke((Action)delegate() { ... });
于 2013-03-12T16:29:39.810 に答える
1

すべてが言ったように。Action と Func は、あなたが望むことを行います。Action は値を返さないメソッドで使用する必要があり、戻り値が必要な場合は Func を使用できます。

于 2013-03-12T16:30:55.283 に答える