在委托上使用+ =运算符是不是很糟糕?

时间:2015-02-08 06:43:58

标签: c#

我刚刚意识到我不知道任何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

2 个答案:

答案 0 :(得分:2)

不好吗?一点都不。事实上,我更喜欢它。

使用它而不是Combine()的一个很好的理由是,你不太可能犯下你在你的例子中犯下的错误:未能将结果实际分配给某些东西。即请注意Combine()方法返回新的委托实例。与string类似,委托是不可变的,所有修改都涉及创建新实例。

虽然使用+运算符可能会犯同样的错误,但大多数人都不会将代码编写为printer + (s => {}),即使他们这样做了,在这种情况下也很明显表达式的结果未分配给任何内容。更惯用的+=当然完全不受问题的影响。 :)

答案 1 :(得分:1)

使用+=完全没问题。如果这是一件坏事,那么该语言就没有一套特殊规则可以让它在代表上正常运行。

它还具有工作的优势,而第二个没有工作。