将方法转发为带参数的委托

时间:2014-06-30 08:50:29

标签: c# delegates

我有以下问题。

class A
{
    public bool Execute(int a);
}

class B
{
    public bool Execute(bool a);
}


static class Consumer
{
    public bool Validate(Delegate d);
}

我希望能够使用execute方法作为参数从“A”和“B”类内部调用Consumer的Validate方法

A或B内:

public static main()
{
    x = new A()
    x1 = A.Execute(1);

    y = new B()
    y1 = B.Execute(true)

    Consumer.Validate(x1)
    Consumer.Validate(y1)
}

当然这可行,但它不会做我想要的。它将执行并创建一个bool值X1,而不是将其存储为要在某一点执行的delegete我选择或将其作为内部对象将其作为集合进行处理,然后重新执行它。

我希望我能把它告诉你,这样你才能理解我的意图。

但是如何用论证来推进它。

这是对问题的简化解释,但仍然相同。

是否可以使用消费者中的委托方法打包参数,然后只执行它们。

2 个答案:

答案 0 :(得分:4)

你可以使用lambda

public bool Execute(int a)
{
    Consumer.Validate(() => this.Execute(a));
}

lambda () => this.Execute(a)a的值存储在其自身内,并提供给Validate简单的你应该知道的界面。

最好将Validate的签名更改为:

 public bool Validate(Func<bool> paramLessPredicate);

答案 1 :(得分:0)

我认为你需要委托和值作为Consumer.Validate函数中的参数:

public bool Validate<T>(Funct<T,bool> validator, T value)
{
    bool validatorResult = validator(value);
    // Do whatever..
    return someBool;
}

在A:

int value = 10;
bool result = Consumer.Validate(Execute, value);