0

メソッドについて事前に何も知らなくても、メソッドをパラメーターとして渡す方法はありますか?

Func<input, return>メソッドのパラメータ/リターンタイプを知らなくても呼び出すことができますか?

4

4 に答える 4

6

最も近い方法は使用することですDelegate。発信者は適切なデリゲートタイプを選択する必要があります。そのため、特定のデリゲートタイプの代わりにをControl.Invoke使用します。Delegate

あるいは、MethodInfoHackedByChineseが示唆するようにあります。どちらを使用するかは、達成しようとしていることによって異なります。それぞれがさまざまなコンテキストで役立ちます。メソッドを説明しようとしている場合は、MethodInfoおそらく最良のアプローチです。ある種の呼び出し可能なアクション(パラメーターを取り、戻り値を持つことができる)を表現しようとしている場合は、デリゲートの方がおそらく便利です。

あなたが達成しようとしていることについてもっと教えていただければ、私たちはあなたをもっと助けることができるかもしれません。

于 2012-05-15T12:59:23.247 に答える
4

リフレクションを介してメソッドを呼び出すことが、あなたが興味を持っていることのように思えます。

MethodInfoを参照してください。

于 2012-05-15T12:59:06.923 に答える
2

これを行うには、デリゲートを使用する必要があります。それをカバーするStackoverflowに関するいくつかの投稿があります。

私はこれを提案します、特にジョンスキートの答え

于 2012-05-15T12:59:30.143 に答える
2

ここではオーバーエンジニアリングしている可能性があります。コード内の周囲のインフラストラクチャを適切に確認し、代わりにリファクタリングを試みる必要があります。

しかし、本当に必要な場合は、ジェネリックでそれを行うことができます。さて、これはお勧めしませんが、この関数は何でも呼び出すことができます。YとTを定義し、時間を呼び出す必要があります。

    public virtual Y MyWrapperFunction<T,Y>(Func<T,Y> func, T param)
    {
        return func(param);
    }

ただし、注意が必要です。ジェネリックは、あらゆる種類のさまざまな問題を引き起こす可能性があります;)

于 2012-05-15T13:11:36.183 に答える