我刚刚意识到我不知道任何C#。
在委托实例上使用+=
和Delegate.Combine
之间有什么区别吗?
例如
public delegate void Printer(string s);
public class Program
{
public static void Main(string[] args)
{
Printer printer = new Printer((s) => { Console.WriteLine(s); });
// is it wrong to use this += operator
// on the delegate instance printer?
printer += s => {};
// And is this somewhat holier than the previous one?
// why?
Delegate.Combine(printer, new Printer((s) => {});
}
}
我问这个问题,因为这个帖子似乎暗示了 serge karalenka 的回答:https://stackoverflow.com/a/15183049/303685
答案 0 :(得分:2)
不好吗?一点都不。事实上,我更喜欢它。
使用它而不是Combine()
的一个很好的理由是,你不太可能犯下你在你的例子中犯下的错误:未能将结果实际分配给某些东西。即请注意Combine()
方法返回新的委托实例。与string
类似,委托是不可变的,所有修改都涉及创建新实例。
虽然使用+
运算符可能会犯同样的错误,但大多数人都不会将代码编写为printer + (s => {})
,即使他们这样做了,在这种情况下也很明显表达式的结果未分配给任何内容。更惯用的+=
当然完全不受问题的影响。 :)
答案 1 :(得分:1)
使用+=
完全没问题。如果这是一件坏事,那么该语言就没有一套特殊规则可以让它在代表上正常运行。
它还具有工作的优势,而第二个没有工作。