以下代码
public class TypeTests {
delegate int LogMessageDelegate(string message);
int LogMessageToConsoleReturn1(string msg) {
Console.WriteLine($"{msg} return 1");
return 1;
}
int LogMessageToConsoleReturn2(string msg) {
Console.WriteLine($"{msg} return 2");
return 2;
}
[Fact]
public void DelegateInvokesMethod() {
LogMessageDelegate log;
// log = LogMessageToConsoleReturn1; // assign to a method group
// log += LogMessageToConsoleReturn2; // multicast using += works just fine
log = LogMessageToConsoleReturn1 + LogMessageToConsoleReturn2; // multicast using + causes CS0019 compiler error
Assert.Equal(2, log("Hello"));
}
}
引发了一场CS0019 compiler error级的爆炸
运算符‘+’不能应用于‘方法组’和‘方法组’类型的操作数
它应该每How to combine delegates (Multicast Delegates)个国家工作一次
可以使用+运算符将多个对象分配给一个委托实例.
并进一步给出了实例
multiDel = hiDel + byeDel;
其中,hiDel
和byeDel
分别是方法组.
使用+=
件作品.也就是说,如果我将测试更改为
[Fact]
public void DelegateInvokesMethod() {
LogMessageDelegate log;
log = LogMessageToConsoleReturn1; // assign to a method group
log += LogMessageToConsoleReturn2; // multicast using += works just fine
// log = LogMessageToConsoleReturn1 + LogMessageToConsoleReturn2; // multicast using + causes CS0019 compiler error
Assert.Equal(2, log("Hello"));
}
然后它编译、运行并通过.