2015-02-08 30 views
1

我剛剛意識到我不知道任何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) => {}); 
    } 
} 

我問這個問題,因爲它似乎是由嗶嘰karalenka的回答這個線程上暗示:https://stackoverflow.com/a/15183049/303685

+0

http://stackoverflow.com/questions/14197857/composing-multicast-delegates-in-c-sharp-shoud-i-use-operators-or-action-combi – TyCobb 2015-02-08 06:50:04

回答

2

不好嗎?一點都不。事實上,我更喜歡它。

使用它的一個很好的理由,而不是Combine()是你不太可能犯你在你的例子中犯的錯誤:沒有實際分配結果的東西。即請注意0​​方法返回新的委託實例。像string一樣,代表是不可變的,所有修改都涉及到創建新實例。

儘管可能與+運算符產生相同的錯誤,但大多數人不會將代碼編寫爲printer + (s => {}),即使他們這樣做,在該情況下,表達式結果未分配任何事情。更習慣的+=當然完全免疫這個問題。 :)

+0

啊,好點。謝謝。 – 2015-02-08 06:52:23

1

使用+=是完全沒有問題。如果這是一件壞事,那麼這種語言就不會有一堆特殊的規則來使它在委託上正常工作。

它也有工作的優勢,而第二個沒有。

+0

非常感謝。 – 2015-02-08 06:55:06

相關問題