在一个赋值语句中,能否将多个方法链接到委托?

6

我希望将两个(未来可能更多)方法链接到一个委托上,想知道是否有一种方法可以在一条赋值语句中完成,例如:

我已经定义了一个委托方法签名

public delegate void MaskRequestSection(Request request); 

...并且有两种使用此签名的方法,即...

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

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

目前,我使用以下代码来实例化委托,将两个方法链接到它上面,然后调用它们...
private void HideDetailsInRequest(Request request)
{
    MaskRequestSection maskRequestSection = MaskCvnSection;
    maskRequestSection += MaskCardNumberSection;
    maskRequestSection(request);
}

我只是好奇为什么我不能像下面这样在一个语句中链接两个委托:
MaskRequestSection maskRequestSection = MaskCardNumberSection+ MaskCvnSection;

...但如果有另一种方法可以在一个声明中完成,也可以这样做。我在MSDN上没有找到任何具体解释,只是出于好奇而问。

提前感谢。


这里是涉及此问题的MSDN文档 - Eren Ersönmez
1个回答

10
你可以使用强制类型转换来实现这一点:
var maskRequestSection = (MaskRequestSection) MaskCardNumberSection
       + (MaskRequestSection) MaskCvnSection;

...但是你不能没有委托来完成它,因为这里的+运算符作用于委托而非方法组。当编译器看到二元+运算符时,必须确定表达式的类型,而那并不考虑赋值部分。


谢谢Jon - 在阅读了Eren对我的原始问题的评论和你的回答后,我看到了区别。干杯。 - phil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接