在C#中委派部分功能?

时间:2013-07-24 11:15:08

标签: c# delegates partial

我写了一些计算代表作为参数传递。

private delegate int CalculateDelegator(int value1, int value2);
CalculateDelegator addWith = add;
CalculateDelegator divWith = div;

private static int add(int value1, int value2) {
    return value1 + value2;
}

private static int div(int value1, int value2) {
    return value1 / value2;
}

接收link(CalculateDelegator method, int value2)作为参数的方法addWith保存value1,调用link的方法保存value2。所以我总是将link()称为单独的paremeter。

有没有办法传递计算方法,包括第一个参数:link(addWith(value2))?  (例如,作为Scala中的部分函数)

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

Func<int, int> partialMethod =
    value1 => addWith(value1, 5);

这样partialMethod将接受一个参数并将其传递给内部'holded'值。

答案 1 :(得分:1)

不,这样的东西在C#中是不可能的。

您可以做的事情如下:

int link(Func<int, int> addWithValue2)
{
    return addWithValue2(value1);
}

你会这样称呼:

link(v1 => addWith(v1, value2));
BTW:我认为你所描述的概念叫做currying,有一个项目试图把它带到C#:https://github.com/ekonbenefits/impromptu-interface/wiki/UsageCurry。它基本上使用了这个答案中显示的方法。

答案 2 :(得分:0)

据我了解您的问题,您需要为int创建一个扩展方法:

public static LinkExtension
{
    public static void Link(this int value, CalculateDelegator method)
    {
        // Link action here
    }
}

所以你只需致电value2.Link(addWith)