1

暗黙的に型指定された引数を使用してデリゲート メソッドを作成できるかどうかに興味があります。これが私が達成しようとしていることです。この種のものは私にはコンパイルできませんが、私が達成しようとしていることのアイデアが得られるはずです。

デリゲートを使用して呼び出したい関数は次のとおりです。

class MyClass
{
    ArrayList function1(int param1, int param2)
    {
        ...do something...
    }
    ArrayList function2(string param3)
    {
        ...do something...
    }
}

そして、これらを呼び出すクラスは次のとおりです。

class MyOtherClass
{
    delegate ArrayList delFunc(params object[] args);

    myOtherClass()
    {
        MyClass myClassInstance = new myClass();
        delFunc myDelFunc1 = myClassInstance.function1;
        delFunc myDelFunc2 = myClassInstance.function2;

        myDelFunc1(1,2);
        myDelFunc2("hello world");
    }


}

明らかに、この例では、提供された関数を実際に呼び出すだけです。私が実際にやろうとしているのは、可能な引数リストを持つデリゲートとして関数を提供できるラッパー関数を作成することです。

私が思いつく唯一の解決策は、MyClass の関数にパラメーター リストも持たせることです。ただし、これらの関数を直接呼び出すと、非常に混乱する可能性があります。これが私が意味することです:

class MyClass
{
    ArrayList function1(params object[] args)
    {
        ...do something...
    }
    ArrayList function2(params object[] args)
    {
        ...do something...
    }
}

これでコンパイルは完了しましたが、関数 1 と関数 2 に何を渡すかを推測するか、コメントを読む必要があります。また、以前はコンパイル時に失敗していましたが、実行時に失敗するようになりました。すべての非常に悪いこと...

このようなことをするために欠けている構文があるかもしれないと思っています

delegate ArrayList delFunc(MatchAnyArgumentSignature);

乾杯、 ロブ

4

1 に答える 1

1

Action<T> または Action<T1, T2, .....> を使用するだけです。

public void Something(int arg1, int arg2, int arg3) {
  ...
}

メソッド内のどこでも:

Action<int, int, int>  call = Something; 
call(1, 2, 3);

この場合、var は使用できません。

とにかく、もう ArrayList を使うべきではありません。

編集:

これらのデリゲートが何かを返す必要がある場合は、Func<TResult>、Func<T1..TN、TResult> があります。

于 2010-10-03T21:13:53.297 に答える