是否可以在一个赋值语句中将多个方法链接到委托?

时间:2012-10-23 07:10:09

标签: c# delegates chaining

我想将两个(可能更多的将来)方法链接到一个委托,并且想知道是否有办法在一个赋值语句中执行此操作,例如

我有一个委托方法签名,定义为

public delegate void MaskRequestSection(Request request); 

...和使用此签名的2种方法,即......

public void MaskCvnSection(Request request)
{
    // do the masking operation
}

public void MaskCardNumberSection(Request request)
{
    // do the masking operation
}

目前,我使用以下方法来实例化delegete,将2个​​方法链接到它,然后调用它们......

private void HideDetailsInRequest(Request request)
{
    MaskRequestSection maskRequestSection = MaskCvnSection;
    maskRequestSection += MaskCardNumberSection;
    maskRequestSection(request);
}

....我只是好奇为什么我不能在下面的一个声明中链接两个代表,

MaskRequestSection maskRequestSection = MaskCardNumberSection+ MaskCvnSection;

...但是如果有另一种方式可以在一个声明中完成。我无法在MSDN上找到任何专门针对此问题的内容,而我只是在问自己的好奇心。

提前致谢。

1 个答案:

答案 0 :(得分:9)

你可以使用演员:

var maskRequestSection = (MaskRequestSection) MaskCardNumberSection
       + (MaskRequestSection) MaskCvnSection;

...但是如果没有一个,你就无法做到,因为这里的+运算符适用于委托,而不是方法组。当编译器看到二进制+运算符时,它必须计算出表达式的类型,