2

関数呼び出しを保存したいクラスがあります。この関数呼び出しは、クラスによって呼び出すことができますが、親クラスによって設定されます。パラメータを含め、実行する呼び出しを外部から提供したいと思います。

何かのようなもの...

public class TestDelegate
{
    public TestDelegate()
    {
        TestClass tc = new TestClass(DoSomething("blabla", 123, null));
    }

    private void DoSomething(string aString, int anInt, object somethingElse)
    {
        ...
    }
}

public class TestClass
{
    public TestClass(delegate method)
    {
        this.MethodToCall = method;
        this.MethodToCall.Execute();
    }

    public delegate MethodToCall { get; set; }
}

TestClassクラスが初期化されると、指定されたパラメーターを使用して親クラスの DoSomething メソッドが呼び出されます。また、呼び出されるメソッドに同じメソッド シグネチャを要求したくないことにも言及する必要があります。常に意味があるとは限らない (string、int、object)

4

2 に答える 2

6

Actionデリゲート型を使用して、クロージャーから this のインスタンスを作成します。

public class TestClass
{
    public TestClass(Action method)
    {
        MethodToCall = method;
        method();
    }

    public Action MethodToCall { get; set; }
}

public class TestDelegate
{
    public TestDelegate()
    {
        // Uses lambda syntax to create a closure that will be represented in
        // a delegate object and passed to the TestClass constructor.

        TestClass tc = new TestClass(() => DoSomething("blabla", 123, null));
    }

    private void DoSomething(string aString, int anInt, object somethingElse)
    {
        // ...
    }
}
于 2013-04-05T19:56:56.010 に答える